Документация для разработчиков
Темная тема

OnBeforeEventAdd

Описание и параметры

функция-обработчик(
	string &$event,
	string &$lid,
	array &$arFields,
	string &$message_id,
	array &$files,
	string languageId = ''
)
Событие OnBeforeEventAdd вызывается в момент добавления почтового события в таблицу b_event. Как правило, задача обработчика данного события - изменить или добавить какое-либо значение, передаваемое в макросы почтового шаблона.  

Параметры

ПараметрОписание С версии
$event Идентификатор типа почтового события, например FORM_FILLING_ANKETA
$lid ID сайта, на котором был вызов метода CEvent::Send()
$arFields Массив параметров, которые передаются в обработчик события.
Пример массива:
Array
	(
		[RS_FORM_ID] => 1
		[RS_FORM_NAME] => Анкета посетителя сайта
		[RS_FORM_VARNAME] => ANKETA
		[RS_FORM_SID] => ANKETA
		[RS_RESULT_ID] => 11
		[RS_DATE_CREATE] => 24.07.2011 16:59:55
		[RS_USER_ID] => 1
		[RS_USER_EMAIL] => my@email.com
		[RS_USER_NAME] =>  
		[RS_USER_AUTH] =>  
		[RS_STAT_GUEST_ID] => 1
		[RS_STAT_SESSION_ID] => 1
		[VS_NAME] => sfdsf
		[VS_NAME_RAW] => sfdsf
		[VS_BIRTHDAY] => 21.07.2011
		[VS_BIRTHDAY_RAW] => 21.07.2011
		[VS_ADDRESS] => sdfdsf
		[VS_ADDRESS_RAW] => sdfdsf
		[VS_MARRIED] => Да [4]
		[VS_MARRIED_RAW] => Да
		[VS_INTEREST] => физика (2) [7]
					программирование (5) [10]
		[VS_INTEREST_RAW] => физика,программирование
		[VS_AGE] => 30-39 (30) [13]
		[VS_AGE_RAW] => 30-39
		[VS_EDUCATION] => высшее (3) [19]
		[VS_EDUCATION_RAW] => высшее
		[VS_INCOME] =>  
		[VS_INCOME_RAW] =>  
		[VS_PHOTO] =>  
		[VS_PHOTO_RAW] =>  
	)
$message_idИдентификатор почтового шаблона (если указан). Если переменная определена в обработчике, то среди нескольких почтовых шаблонов по одному типу будет отправлен только с этим ID, а не все.11.0.16
$filesФайл16.0.1
$languageId (По умолчанию - текущий язык) Отвечает за отправку уведомлений на указанном языке (у почтовых шаблонов параметр "Язык"). Отправляются все шаблоны без указания языка и те у которых язык соответствует $languageId.

Фильтр по языку шаблонов не выполняется если передается переменная $messageId.

Пример функции-обработчика:

<?
class MyClass
{
	function onBeforeEventAdd(&$event, &$lid, &$arFields, &$messageId, &$files, &$languageId)
	{
		// код
	}
}
?>
16.5.8

Возвращаемое значение

Нет. Начиная с версии ядра 11.0.16 при возврате false добавление почтового события отменяется.

Пример функции-обработчика

<?
//Обработчик в файле /bitrix/php_interface/init.php
AddEventHandler("main", "OnBeforeEventAdd", array("MyClass", "OnBeforeEventAddHandler"));
class MyClass
{
	public static function OnBeforeEventAddHandler(&$event, &$lid, &$arFields)
	{
		$arFields["NEW_FIELD"] = "Новый макрос для почтового шаблона";
		$arFields["VS_BIRTHDAY"] = "Изменение существующего макроса";
		$lid = 's2'; //Изменяем привязку к сайту
	}
}
?>



Пользовательские комментарии

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

Для этого нужно всего лишь авторизоваться на сайте

Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.

Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.
0
Александр Чепурнов
Цитата
$message_id Идентификатор почтового шаблона (если указан). Если переменная определена в обработчике, то среди нескольких почтовых шаблонов по одному типу будет отправлен только с этим ID, а не все.
Что бы этого избежать, нужно присвоить 0 (ноль) этой переменной в конце функции-обработчика.
Пример:
Код
function OnBeforeEventAddHandler(&$event, &$lid, &$arFields, &$message_id, &$files){
    //Какойто код

    $message_id = 0;
}
2
Василий Рыбыдак
Пример реализации отключения уведомлений о заказах для учетных записей у которых определенно пользовательское свойство UF_NOTIFY_SALE == 0 (не уведомлять)
Код
# D7: Отключаем уведомления о заказах для пользователей, которые не хотят их получать
AddEventHandler("main", "OnBeforeEventAdd", "DoNotSendMailSale");
function DoNotSendMailSale (&$event, &$lid, &$arFields) {
    // определяем ID заказа
    $OrderId = $arFields[ORDER_REAL_ID];
    if ($OrderId > 0):
        // получаем данные о заказе
        \Bitrix\Main\Loader::includeModule('sale');
        $OrderDetail = \Bitrix\Sale\Order::load($OrderId);
        // извлекаем параметр уведомления у пользователя, который сделал заказ
        $OrderByUser = $OrderDetail->getUserId();
        $arFilter = array("ID" => $OrderByUser);
        $arParameters['SELECT'] = array("UF_NOTIFY_SALE");
        $arRes = CUser::GetList(($by = "personal_country"), ($order = "desc"), $arFilter, $arParameters);
        $res = $arRes->Fetch();
        // если у пользователя определено НЕТ, то останавливаем отправку письма
        if ($res["UF_NOTIFY_SALE"] == 0): return false; endif;
    endif;
}
© «Битрикс», 2001-2024, «1С-Битрикс», 2024
Наверх