События
Иногда возникает необходимость повлиять на работу какой-либо функции ядра 1С-Битрикс, например, вам нужно сделать так, чтобы при добавлении нового заказа автоматически отсылалось оповещение менеджеру магазина посредством SMS. Делать это при помощи прямой модификации функций ядра системы смысла мало, поскольку эти изменения будут жить лишь до первого обновления системы, поэтому есть смысл поискать решения на основе событий.
Что такое событие
В ходе выполнения некоторых API функций, в определённых точках установлены вызовы определённых функций, так называемых обработчиков события
. Какие функции-обработчики
должны быть вызваны в каком месте и при каком событии нужно устанавливать вызовом функции, регистрирующей обработчики.
Примеры
Есть событие OnOrderAdd
, которое вызывается после добавления нового заказа. Вы хотите выполнить какие-то действия сразу после добавления заказа.
Изменяем файл /bitrix/php_interface/init.php
, либо /local/php_interface/init.php
если сайтов много, а нам нужен только конкретный, добавляем строки в конец файла. Мы назначаем обработчик OrderAddHandler
событию OnOrderAdd
. Теперь в функции OrderAddHandler
мы можем добавить код, который должен выполнять при создании нового заказа:
init.phpAddEventHandler('sale', 'OnOrderAdd', 'OrderAddHandler');
function OrderAddHandler(&$val)
{
// тут наши действия
}
Необходимо чтобы пользователей с определенными именами не регистрировало в системе. Очевидно, что нам нужно найти событие, которое бы вызывалось ДО
добавления юзера в систему, это событие OnBeforeUserAdd
. Из кода понятно, мы проверяем совпадает ли логин, который выбрал пользователь при регистрации с набором логинов в массиве $bad_logins
, которые нельзя использовать. Если пользователь выбрал нехороший логин, выскакивает сообщение об ошибке Данный логин запрещен в системе
и система не регистрирует пользователя:
init.phpAddEventHandler('main', 'OnBeforeUserAdd', 'OnBeforeUserAddHandler');
function OnBeforeUserAddHandler(&$arFields)
{
$bad_logins = Array('admin', 'administrator');
if(in_array($arFields['LOGIN'], $bad_logins))
{
global $APPLICATION;
$APPLICATION->throwException('Данный логин запрещен в системе');
return false;
}
}
Для каждого модуля, доступны свои события которые можно пременять по приведенной выше методике. Все возможные события, которые знает Битрикс можно посмотреть в официальной документации.