Bitrix

1С-Битрикс — Замену общих констант в почтовых шаблонах

Несколько раз у меня возникал вопрос такого плана — как сделать так, чтобы общие константы во всех письмах можно было заменять централизованно, т.е. у вас например есть 2 почтовых шаблона и в каждом из них вы хотите сделать общую подпись вроде: «с уважением, администрация сайта http://www.site.org». Естественно, возникает мысль, что раз такая надпись есть в каждом из двух писем и эта надпись одинакова в этих письмах, то ее можно присвоить какой-то константе, а в текст письма вставить эту константу. Вариант реализации этого я расскажу в этой статье.

1. Определяем место для хранения констант для почтовых шаблонов в панели управления Битрикс

Я такие вопросы решаю обычно простым созданием дополнительного информационного блока. В нашем случае мы должны хранить наименование константы и текст, на который будет заменяться константа. Для хранения наименования константы будем использовать наименование, а для хранения текста — поле Детальное описание.

 

2. Определяем форму подстановки константы в почтовый шаблон

Проще всего использовать форму, которую использует Битрикс #FIELD_NAME# . Соответственно, в инфоблоке будем хранить наименование константы в форме FIELD_NAME , а шаблоне письма писать #FIELD_NAME#  .

 

3. И делаем замену!

Мы, конечно же, не будем лезть в ядро системы и пытаться что-то там менять. Мы просто будем использовать события Битрикс.

Нужное нам событие легко найти в документации OnBeforeEventSend — http://dev.1c-bitrix.ru/api_help/main/events/onbeforeeventsend.php

Добавляем код в файл  /bitrix/php_interface/init.php (если такого файла не обнаружите, то его нужно создать):

AddEventHandler('main', 'OnBeforeEventSend', "OnBeforeEventSendHandle");

// замена констант в письмах
function OnBeforeEventSendHandle($arFields)
{

}

Этот код позволит зарегистрировать обработчик события. Далее в функции OnBeforeEventSendHandle пишем код замены общих констант.

 

AddEventHandler('main', 'OnBeforeEventSend', "OnBeforeEventSendHandle");

// замена констант в письмах
function OnBeforeEventSendHandle($arFields)
{
	if(!CModule::IncludeModule("iblock"))
	{
		ShowError(GetMessage("IBLOCK_MODULE_NOT_INSTALLED"));
		return 0;
	}	

	$arFilter = Array("IBLOCK_ID"=>22, "ACTIVE"=>"Y");
        $arSelect = Array("NAME", "DETAIL_TEXT");
	$res = CIBlockElement::GetList(Array(), $arFilter, false, false, $arSelect);
	while($ob = $res->GetNextElement())
	{
		$ob["NAME"] = str_replace("#", "", $ob["NAME"]);
		$ob["DETAIL_TEXT"] = htmlspecialchars_decode($ob["DETAIL_TEXT"]);
		$arFields[$ob["NAME"]] = $ob["DETAIL_TEXT"];
	}
}

В коде вам нужно будет заменить ID информационного блока, в котором хранятся константы, на свой. И это все. Удачи в работе!

Отставить комментарий

Ваш электронный адрес не будет опубликован.Обязательные для заполнения поля отмечены *

9 − пять =