Вообще невозможность сделать это является камнем преткновения в шаблонах почтовых сообщений Битрикс.
В шаблонах нельзя задавать циклы! Циклы в почтовых шаблонах задавать нельзя!
Если, например, в письме рассылать список товаров, то приходится либо захардкодить все html-оформление, либо вынести шаблон товара например в языковой файл.
В любом случае требуется какое-то взаимодействие с кодом.
Однажды я решил понять, как же засунуть в шаблоны циклы. Как оказалось - это возможно и я даже реализовал простейший модуль, в котором сторонний шаблонизатор обрабатывает свой блок разметок и отдает контент обратно в шаблон Битрикс.
Тем кому не терпится скачать - ссылка на github. Краткое README там имеется, но я еще его тут повторю.
Итак, установка:
1. Клонируем репозиторий в свой битриксовый сайт в каталог с модулями. Обычно это
Важно: папка с модулем должна называться
Пример git-команды:
3. Редактируем нужный почтовый шаблон.
Настройка шаблона:
по умолчанию, в комплект модуля сразу включен шаблонизатор Twig и модуль настроен на работу с ним. Чтобы выбранный почтовый шаблон передался на обработку Твигу, делаем следующее:
раскрываем дополнительные поля почтового шаблона и прописываем в поле
Затем размещаем блок разметки, основываясь на следующих правилах:
1. Блок начинается и заканчивается тегами
2. После
3. После
Например, учитывая все вышесказанное, блок разметки может выглядеть так:
Здесь:
Вызов функции
Приветствуется всякое комментаторство и форкание, ибо протестирован шаблонизатор только на поддержку циклов for
В шаблонах нельзя задавать циклы! Циклы в почтовых шаблонах задавать нельзя!
Если, например, в письме рассылать список товаров, то приходится либо захардкодить все html-оформление, либо вынести шаблон товара например в языковой файл.
В любом случае требуется какое-то взаимодействие с кодом.
Однажды я решил понять, как же засунуть в шаблоны циклы. Как оказалось - это возможно и я даже реализовал простейший модуль, в котором сторонний шаблонизатор обрабатывает свой блок разметок и отдает контент обратно в шаблон Битрикс.
Тем кому не терпится скачать - ссылка на github. Краткое README там имеется, но я еще его тут повторю.
Итак, установка:
1. Клонируем репозиторий в свой битриксовый сайт в каталог с модулями. Обычно это
/bitrix/modules/
или (если вы следуете новой моде) /local/modules/
Важно: папка с модулем должна называться
um.mail_template
(хотя сам проект называется по-другому)Пример git-команды:
git clone https://github.com/u-mulder/ummailtemplates.git um.mail_template
2.Из админки стандартными средствами устанавливаем модуль.3. Редактируем нужный почтовый шаблон.
Настройка шаблона:
по умолчанию, в комплект модуля сразу включен шаблонизатор Twig и модуль настроен на работу с ним. Чтобы выбранный почтовый шаблон передался на обработку Твигу, делаем следующее:
раскрываем дополнительные поля почтового шаблона и прописываем в поле
FIELD1
или FIELD2
название TWIG_USED и значение, конвертируемое в булевое true.Затем размещаем блок разметки, основываясь на следующих правилах:
1. Блок начинается и заканчивается тегами
#FOR_LOOP_START_#
и #FOR_LOOP_END_#
с одинаковыми цифровыми окончаниями, например, #FOR_LOOP_START_2#
и #FOR_LOOP_END_2#
, пары типа #FOR_LOOP_START_ABD#
и #FOR_LOOP_END_ABD#
не распознаются2. После
#FOR_LOOP_START_#
идет тег #LOOP_SOURCE:ORDERS#
, где ORDERS - название поля в параметре $arFields
функций CEvent::Send/SendImmediate
, под этим же названием, но в нижнем регистре (orders) значение поля $arFields
будет передано в шаблонизатор. Внимание, значение поля должно быть предварительно сериализовано!3. После
#LOOP_SOURCE:ORDERS#
идет обычная разметка Twig.Например, учитывая все вышесказанное, блок разметки может выглядеть так:
#FOR_LOOP_START_1##LOOP_SOURCE:ORDERS#
{% for idx, order in orders %}
<a href="http://#SITE_NAME#/{{%20order.link%20}}">{{ order.name }} [{{ order.qty }}]</a><br />
{% endfor %}
#FOR_LOOP_END_1#
Здесь:
- указана область для разметки Twig парой тегов
#FOR_LOOP_START_1#
,#FOR_LOOP_END_1#
- указан ключ
ORDERS
массива$arFields
, который будет передан в шаблонизатор параметромorders
- указана разметка шаблонизатора.
Вызов функции
CEvent::Send
выглядит так:
CEvent::Send(
'EVENT_NAME',
'site_id',
array(
...
'ORDERS' => serialize($some_array),
...
)
);
Приветствуется всякое комментаторство и форкание, ибо протестирован шаблонизатор только на поддержку циклов for
Комментариев нет:
Отправить комментарий