Начнем, пожалуй с предыстории...
Как то захотелось мне сделать в одном ИМ почтовые сообщения в шаблонах, шапка там, контент, подвал...
нарисовали шаблон, все красиво, товары,банеры,тексты и прочее, ну как полагается....заверстали как полагается для почты, таблички таблички, кругом одни таблички...И тут вопрос, ну не копипастить же это всё в шаблоны почтовые, а их порядка 40 вроде бы штук...
Посмотрел как это в коробке сделано и стало плохо, там шаблон целиком идет в теле письма(ну плюс этого ессно есть, никакого кода, только шаблон и макросы для замены)
Ну да ладно, приступим к реализации.
минусы:
пара-тройка запросов, исполнение кода и прочего, короче нагрузка доп.
плюсы:
mvc, порядок, в едином шаблоне, персонализированные письма(не просто "здрасьте юзернейм" а список товаров например с ценами уже, какая то доп инфа и прочее.)
итак:
первым делом добавим обработчик
далее it's a magic
Вот и все, как бы.
Мы проверяем наличие файла с именем соотв названию почтового шаблона в директории, которая указана в коде.
Если все гуд, мы получим сгенерированный html из подключенного файла и вставим его в тело письма, переключив при этом тип тела на html(ну мы как бэ отправляем html вид письма то)
Далее рассмотрим файл с каким-нибудь шаблоном письма подробней.
На вход туда приходят 2 массива, arFields и arTemplate, причем оба приходят ссылками, т.е. можно данные править в них и они будут дальше обработаны системой(ну вдруг вы любитель макросов и хотите добавить свой еще далее
arFields - массив параметров почтового шаблона(кому,куда,от кого, заголовок, ид шаблона, имя шаблона, и сам текст письма(который мы и меняем)
arTemplate - массив с "макросами" для почтового шаблона, а теперь мы его можем использовать как массив параметров(как вы компоненты вызываете)
Само письмо должно содержать как и шаблон сайта, шапку, подвал, и то, что в теле письма будет идти как бы рабочая область.
это шаблон любого письма теперь в центре ваш код, а шапка и подвал всегда будут одинаковые
Вот как бы и все. решение банальное до жути, но кстати незнаю почему никто не обернул в модуль...было бы круто, особенно если сделать предпросмотр письма
А вот и результат
Как то захотелось мне сделать в одном ИМ почтовые сообщения в шаблонах, шапка там, контент, подвал...
нарисовали шаблон, все красиво, товары,банеры,тексты и прочее, ну как полагается....заверстали как полагается для почты, таблички таблички, кругом одни таблички...И тут вопрос, ну не копипастить же это всё в шаблоны почтовые, а их порядка 40 вроде бы штук...
Посмотрел как это в коробке сделано и стало плохо, там шаблон целиком идет в теле письма(ну плюс этого ессно есть, никакого кода, только шаблон и макросы для замены)
Ну да ладно, приступим к реализации.
минусы:
пара-тройка запросов, исполнение кода и прочего, короче нагрузка доп.
плюсы:
mvc, порядок, в едином шаблоне, персонализированные письма(не просто "здрасьте юзернейм" а список товаров например с ценами уже, какая то доп инфа и прочее.)
итак:
первым делом добавим обработчик
AddEventHandler("main", "OnBeforeEventSend", Array("CMainHandlers", "OnBeforeEventSend")); |
далее it's a magic
public function OnBeforeEventSend(&$arFields,&$arTemplate){ $eventName = $arTemplate['EVENT_NAME']; $file = $_SERVER['DOCUMENT_ROOT'].'/bitrix/php_interface/email_templates/'.$eventName.'.php'; if(file_exists($file)){ ob_start(); include($file); $arTemplate['MESSAGE'] = ob_get_contents(); $arTemplate['BODY_TYPE'] = 'html'; ob_end_clean(); } } |
Мы проверяем наличие файла с именем соотв названию почтового шаблона в директории, которая указана в коде.
Если все гуд, мы получим сгенерированный html из подключенного файла и вставим его в тело письма, переключив при этом тип тела на html(ну мы как бэ отправляем html вид письма то)
Далее рассмотрим файл с каким-нибудь шаблоном письма подробней.
На вход туда приходят 2 массива, arFields и arTemplate, причем оба приходят ссылками, т.е. можно данные править в них и они будут дальше обработаны системой(ну вдруг вы любитель макросов и хотите добавить свой еще далее
arFields - массив параметров почтового шаблона(кому,куда,от кого, заголовок, ид шаблона, имя шаблона, и сам текст письма(который мы и меняем)
arTemplate - массив с "макросами" для почтового шаблона, а теперь мы его можем использовать как массив параметров(как вы компоненты вызываете)
Само письмо должно содержать как и шаблон сайта, шапку, подвал, и то, что в теле письма будет идти как бы рабочая область.
<?include('header.php');?> <?include('footer.php');?> |
Вот как бы и все. решение банальное до жути, но кстати незнаю почему никто не обернул в модуль...было бы круто, особенно если сделать предпросмотр письма
А вот и результат