Перейти к содержимому


Передать в шаблон письма динамические данные


Сообщений в теме: 3

#1 Anton1

    Участник

  • Пользователи
  • PipPip
  • 20 сообщений
  • Пол:Мужчина

Отправлено 13 Сентябрь 2023 - 20:50

Надо выполнить SQL запрос и его результаты отправить по почте используя шаблон.
Единственный предполагаемый рабочий вариант - это через вычисляемое поле.
Создал вычисление:
Выполняю запрос, обрабатываю, записываю в $line['Данные']
Сразу отправляю письмо через send_template(), в шаблоне используется $line['Данные']
Но $line['Данные'] в момент отправки пусто, данные в нем появляются после отправки письма и завершения вычисления.

Как динамически сформировать данные и передать их в шаблон?

#2 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 761 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 15 Сентябрь 2023 - 14:56

Переменная $line будет сохранена в БД только после завершения кода всех вычислений, а send_template берет сразу данные из БД. Поэтому и записывать в вашем случае лучше в БД напрямую:

data_update($table_id, ['f111' => $data], 'id = ', $ID); // 111 - замените на id поля "Данные", в $data - результат вашего запроса


#3 Anton1

    Участник

  • Пользователи
  • PipPip
  • 20 сообщений
  • Пол:Мужчина

Отправлено 15 Сентябрь 2023 - 15:49

Спасибо работает.

Еще вопрос.
В письме надо отобразить таблицу, в моем случае расписание. Подготавливаю массив:
$data = array();
$sqlQuery = "...";
$res = sql_query($sqlQuery);
while($row = sql_fetch_assoc($res)){
		$data[] = $row;
}
data_update($table_id, ['f111' => json_encode($data)], 'id = ', $ID);

в шаблоне формирую таблицу:
{foreach from=html_entity_decode ($Shedule_array)|json_decode:1 item=Shedule_array}
...
{/foreach}

Код работает, но возможно есть более правильные и изящные решения передачи результатов запроса в шаблон письма, без использования json и html_entity_decode ?

#4 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 761 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 29 Сентябрь 2023 - 12:16

Просмотр сообщенияAnton1 (15 Сентябрь 2023 - 15:49) писал:

Код работает, но возможно есть более правильные и изящные решения передачи результатов запроса в шаблон письма, без использования json и html_entity_decode ?

Если вам надо передать подтаблицу, то в шаблоне письма есть штатные переменные для этого. Если же это сторонняя таблица не связанная никак с текущей, то вероятно более оптимальных вариантов чем у вас в примере вряд ли можно придумать. Разве что я бы на такой же задаче скорее всего записал бы в то же поле сразу HTML (в поле типа с текст включенной опцией html форматирование) и просто вывел бы переменную поля в шаблоне. Но у вашего варианта свои плюсы.





Количество пользователей, читающих эту тему: 4

0 пользователей, 4 гостей, 0 анонимных