Как переопределить класс Notify в папке local (или кастомизировать свои оповещения) в Битрикс:Управление сайтом?
Здравствуйте!
У меня стоит задача отправлять дополнительные (свои собственные данные) по почтовому шаблону клиенту, сделавшему заказ. Как сделать так, чтобы я мог подставлять в письмо свои данные (допустим: местоположение выбранного пользователем склада), помимо всех остальных стандартных?
** Мои догадки: **
Я так понимаю, при оформлении заказа, вызывается класс Notify(лежит по адресу: /bitrix/modules/sale/lib/notify.php), который, в зависимости от вызванного почтового события собирает необходимые данные и отправляет методом Send на почту (проверял, пробовал изменить некоторые данные - работает). И как я понял, для решения данной задачи мне необходимо переопределить класс Notify в папке local и кастомизировать те шаблоны, что мне нужны (дабы не трогать родной notify.php). Но проблема в том, что у меня почему-то он не переопределяется и используется похоже тот, что лежит в папке bitrix а не в моей local.., хотя поместил файл вроде правильно..(по адресу: /local/modules/sale/lib/notify.php), и изменил namespace Bitrix\Sale; на: namespace Local\Sale; , но почему-то всеравно не реагирует...
в init.php используйте обработчик
AddEventHandler("sale", "OnOrderNewSendEmail", "bxModifySaleMails");
-bxModifySaleMails функция обработчика
с помощью CSaleOrder::GetByID и CSaleOrderPropsValue::GetOrderProps получаете данные заполненные пользователем и эти данные отдаете в свои почтовые макросы, после этого эти макросы будут доступны в почтовом шаблоне.
Для начала: классы нельзя переопределять - только модули, но это не вариант от слова "совсем".
Для решения вашей задачи легальные способы:
- Модифицировать отправляемый почтовый шаблон и добавить в него php-код для получения нужно информации
- На событии onBeforeEventAdd / onBeforeEventSend дописывать нужные данные в почтовый шаблон
- Отключить стандартные уведомления и на событиях самому отправлять уведомления.
Выбирайте способ которым хотите воспользоваться сами :)
- Отключить стандартные уведомления и на событиях самому отправлять уведомления.
На мой взгляд нормальный только этот. Я сам использовал как-то
- На событии onBeforeEventAdd / onBeforeEventSend дописывать нужные данные в почтовый шаблон
пару раз, но мне кажется к этому надо прибегать когда первый способ не пременим (по каким-то причинам нельзя перехватить событие или надо вносить изменение одинаковое для группы разных событий)
Первый варик... что? PHP исполняется в шаблоне письма?
$_POST["myData"] = $myVariable["DATA"]; //закинул в $_POST, т.к мой обработчик непонятно когда вызывался и как, и мою переменную $myVariable почему-то не видел
3) В своей функции-обработчике наполнил массив $arFields теми данными, что определил выше:
function AddMoreData($newOrderId, &$eventName, &$arFields)
{
$arFields["DATA"] = $_POST["myData"]; //здесь DATA должно совпадать с названием поля в почтовом шаблоне
}
Как-то так. Насчет $_POST я вот конечно не уверен что хорошее решение, но тем не менее. Если более опытные люди могут что-нибудь предложить по поводу улучшения - буду только рад.
Думаю что в вашем случае проще всего будет подписаться на событие OnBeforeEventSend (название точно не помню, гуглите).
В обработчике события доступен тип отправляемого письма и все данные для его формирования. Этого достаточно, чтобы выбрать из базы дополнительную информацию и направить ее в почтовый шаблон.
OnBeforeEventSend - в момент отправки происходит. Пополнить там $arSend уже как-то проблематично будет. Ну и плюс OnBeforeEventAdd происходит на хите пользователя, OnBeforeEventSend непонятно когда.