Вообще невозможность сделать это является камнем преткновения в шаблонах почтовых сообщений Битрикс.
В шаблонах нельзя задавать циклы! Циклы в почтовых шаблонах задавать нельзя!
Если, например, в письме рассылать список товаров, то приходится либо захардкодить все 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
Комментариев нет:
Отправить комментарий