События
Какие уже события отслеживаются?
При установке модуля сразу регистрируются обработчики на события:- main OnBeforeUserAdd - перед добавлением пользователя
- main OnAfterUserAdd - после добавления пользователя
- main OnBeforeUserUpdate - перед обновлением пользователя
- main OnAfterUserUpdate - после обновления пользователя
- main OnBeforeEventAdd - перед возникновением почтового события
- sale OnBeforeOrderAdd - пере добавлением заказа
- sale OnOrderAdd - после добавления заказа
- sale OnBeforeOrderUpdate - перед обновлением заказа
- sale OnOrderUpdate - при обновлении заказа
- sale OnSalePayOrder при оплате заказа
- sale OnSaleCancleOrder - при отмене заказа
- sale OnSaleStatusOrder - при изменении статуса заказа
События модуля СМС оповещений, доступные для использования
Так как модуль написан используя новое ядро битрикса - D7, то в модуле доступны события добавления, редактирования, удаления записей из базы данных для следующих классов:- \Bxmaker\Smsnotice\Manager
- \Bxmaker\Smsnotice\Service
- \Bxmaker\SmsNotice\Template
- \Bxmaker\SmsNotice\Template\Type
- \Bxmaker\SmsNotuce\Template\Site
/* события - OnBeforeAdd, OnAfterAdd, OnBeforeDelete, OnAfterDelete, OnBeforeUpdate, OnAfterUpdate */
AddEventHandler('bxmaker.smsnotice', '\Bxmaker\Smsnotice\Manager::OnBeforeAdd', 'bxmaker_smsnotice_onBeforeAdd');
use \Bitrix\Main\Entity; /* стоку разместить в начале файла */
function bxmaker_smsnotice_onBeforeAdd(Entity\Event $event)
{
$result = new Entity\EventResult;
$data = $event->getParameter("fields");
if (isset($data['STATUS']))
{
/* указываем статус сообщения - "доставлено", при добавлении в базу*/
$result->modifyFields(array('STATUS' => \Bxmaker\SmsNotice::SMS_STATUS_DELIVERED));
}
// $result->unsetFields(array('COMMENT'));
return $result;
}
Также существуют специальные события для контроля над отправкой смс сообщений как одиночных так и по шаблонам
Событие перед отправкой одиночного смс - OnBeforeSend
/* регистрация обработчика события */
AddEventHandler('bxmaker.smsnotice', 'OnBeforeSend','bxmaker_smsnotice_OnBeforeSend');
function bxmaker_smsnotice_OnBeforeSend($arFields){
/* здесь происходят какие то операции над $arFields */
/* 1. возвращение результата работы обработчик*/
/* если ошибок не было */
return new \Bitrix\Main\EventResult( \Bitrix\Main\EventResult::SUCCESS, array($arFields));
/* 2. если произошла ошибка или надо предотвратить отправку
возвращаем ошибку и текст ошибки. Можно добавить
$arFields['error_msg'] = 'Текст ошибки. Если не указывать
этот параметр будет возвращен текст ошибки - "Один из обработчиков событий вернул статус - ERROR.
Отправка не произошла."';
*/
return new \Bitrix\Main\EventResult( \Bitrix\Main\EventResult::ERROR, array($arFields));
}
Отправка смс по шаблону - OnBeforeSendTemplate
/* регистрация обработчика события */AddEventHandler('bxmaker.smsnotice', 'OnBeforeSendTemplate','bxmaker_smsnotice_OnBeforeSendTemplate');
function bxmaker_smsnotice_OnBeforeSendTemplate($template, $arFields){
/* здесь происходят какие то операции над $arFields */
/*1. возвращение результата работы обработчик*/
/* если ошибок не было */
return new \Bitrix\Main\EventResult( \Bitrix\Main\EventResult::SUCCESS, array($template, $arFields));
/*2. если произошла ошибка или надо предотвратить отправку
возвращаем ошибку и текст ошибки. Можно добавить
$arFields['error_msg'] = 'Текст ошибки. Если не указывать
этот параметр будет возвращен текст ошибки - "Один из обработчиков событий вернул статус - ERROR.
Отправка не произошла."';
*/
return new \Bitrix\Main\EventResult( \Bitrix\Main\EventResult::ERROR, array($template, $arFields));
}
Событие OnPreparedOrderData - Изменение полей с данными о заказе, добавление своих
Это событие вызывается после того как подготовленные данные о заказе, которые дальше будут использоваться для формирования смс сообщения на основе шаблона. Его удобно использовать для расширения данных для автозамены.Рассмотрим на примере.
Задача - нужно покупателю в смс отправить сообщение с ссылкой на страницу с описанием пункты выдачи заказа, схемой проезда и тп. Идентификатор пункта выдачи есть в адресе доставки - Пункт выдачи boxberry: ул. Одоевского, д. 27, лит. А, секция 212 (ТК Платформа, м. Приморская), телефон: (812) 930-09-15, часы работы: с 11:00 до 21:00, без выходных, код филиала: 78461/6603/7/72
1. Добавляем тип шаблона для статуса заказа

2. Указываем в настройках модуля для соответствующего статуса отправку сообщений с типом

3. Добавляем СМС шаблон в котором указываем новое поле с кодом филиала (оно будет формироваться обработчиком события далее)
Адрес пункта выдачи - https://boxberry.ru/find_an_office/#DELIVERY_BOXBERRY_CODE_FILIALA#/

4. Добавляем обработчик события в файл /bitrix/php_interface/init.php
$eventManager = \Bitrix\Main\EventManager::getInstance(); //подписываем обработчик на событие
$eventManager->addEventHandler("bxmaker.smsnotice", "OnPreparedOrderData", array(
'CBXmakerEventHandler', 'bxmaker_smsnotice__OnPreparedOrderData'
));
Class CBXmakerEventHandler {
// обоработчик ----
public function bxmaker_smsnotice__OnPreparedOrderData(\Bitrix\Main\Event $event)
{
$arOrderData = $event->getParameters();
$codFiliala = '';
$deliveryAdress = explode(',',$arOrderData['PROPERTY_VALUE_ADDRESS']);
foreach($deliveryAdress as $adres)
{
$arAdresCol = explode(':', trim($adres));
if($arAdresCol[0] = 'код филиала')
{
$codFiliala = explode('/', trim($arAdresCol[1]));
$codFiliala = $codFiliala[0];
}
}
$arOrderData['DELIVERY_BOXBERRY_CODE_FILIALA'] = $codFiliala;
$result = new \Bitrix\Main\EventResult(Bitrix\Main\EventResult::SUCCESS, $arOrderData);
return $result;
}
}
5. В результате получаем
