Иногда при отправке письма с сайта необходимо выполнить "под капотом сайта" какие-либо действия...
Иногда при отправке письма с сайта необходимо выполнить "под капотом сайта" какие-либо действия. Например, при создании нового заказа срабатывает системное почтовое событие SALE_NEW_ORDER, которое отправляет на почту клиенту данные о его заказе. А мы, допустим, хотим при этом отправить данные о заказе еще куда-то: в CRM, в 1С или в Telegramm. Рассмотрим как это можно сделать. Для начала переопределим событие OnBeforeEventSend, привязав к нему выполнение функции postOrder:
AddEventHandler('main', 'OnBeforeEventSend', 'postOrder');
Таким образом перед вызовом события отправки письма будет вызвана функция postOrder. Ниже ее код:
function postOrder($arFields, $arTemplate){
if($arTemplate["EVENT_NAME"] == "SALE_NEW_ORDER"){
//Ваш код
}
return true;
}
Функция принимает два параметра: 1 - массив полей данных, которые передаются в шаблон письма (в нашем случае данные нового заказа); 2 - массив данных самого шаблона. В данном примере мы проверяем, что шаблон привязан к событию SALE_NEW_ORDER. И если это так, то в теле условия пишем нужный нам код.
Решим следующую задачу. Пусть на нужно при создании нового заказа записать в логи данные этого заказа. Точнее записать те данные, которые передаются в почтовый шаблон. Тогда функцию postOrder можно записать так:
function postOrder($arFields, $arTemplate){
if($arTemplate["EVENT_NAME"] == "SALE_NEW_ORDER"){
$file = $_SERVER["DOCUMENT_ROOT"]."/app.log";
writeLog($arFields,'result',$file);
}
return true;
}
В переменную $file помещаем абсолютный путь до файла app.log, в который будут записываться логи. Далее, использую функцию writeLog, поместим массив данных письма $arFields в этот файл. Ниже приведен код функции writeLog:
function writeLog($data, $title = 'logs',$file){
$log = "\n------------------------\n";
$log .= date("Y.m.d G:i:s") . "\n";
$log .= (strlen($title) > 0 ? $title : 'DEBUG') . "\n";
$log .= print_r($data, 1);
$log .= "\n------------------------\n";
file_put_contents($file, $log, FILE_APPEND);
return true;
}
В сущности можно было обойтись и без этой функции, а добавление осуществить с помощью стандартной функции file_put_contents. Функция writeLog делает вывод форматированным с дополнительными данными.