1С-Битрикс — интерфейс событий, примеры использования

1С-Битрикс — интерфейс событий, примеры использования

Иногда возникает необходимость повлиять на работу какой-либо функции ядра 1С-Битрикс, например, вам нужно сделать так, чтобы при добавлении нового заказа автоматически отсылалось оповещение менеджеру магазина посредством SMS. Делать это при помощи прямой модификации функций ядра системы смысла мало, поскольку эти изменения будут жить лишь до первого обновления системы, поэтому есть смысл поискать решения на основе событий.

Что такое событие?

В ходе выполнения некоторых API функций, в определённых точках установлены вызовы определённых функций, так называемых обработчиков события. Какие функции-обработчики должны быть вызваны в каком месте (при каком событии) нужно устанавливать вызовом функции, регистрирующей обработчики.

Приведем простой пример:

Есть событие OnOrderAdd, которое вызывается после добавления нового заказа. Вы хотите выполнить какие-то действия сразу после добавления заказа. Это можно сделать так.

Изменяем файл /bitrix/php_interface/init.php (либо /local/php_interface/init.php если сайтов много, а нам нужен только конкретный), добавляем строки в конец файла:

AddEventHandler('sale', 'OnOrderAdd', 'OrderAddHandler');
function OrderAddHandler(&$val)
{
  // тут наши действия
}

Что мы сделали? Мы назначили обработчик OrderAddHandler событию OnOrderAdd. Теперь в функции OrderAddHandler мы можем добавить код, который должен выполнять при создании нового заказа.

Пример посложнее.

Предположим, мы хотим, что пользователей с определенными именами не регистрировало в системе. Очевидно, что нам нужно найти событие, которое бы вызывалось ДО добавления юзера в систему. Это событие — OnBeforeUserAdd.

Получаем такой код:

AddEventHandler('main', 'OnBeforeUserAdd', 'OnBeforeUserAddHandler');

function OnBeforeUserAddHandler(&$arFields)
{
    $bad_logins = Array('admin', 'administrator');
    if(in_array($arFields['LOGIN'], $bad_logins))
    {
        global $APPLICATION;
        $APPLICATION->throwException('Данный логин запрещен в системе');
        return false;
    }
}

Из кода понятно, что мы проверяем совпадает ли логин, который выбрал пользователь при регистрации с набором логинов в массиве $bad_logins, которые нельзя использовать. Если пользователь выбрал нехороший логин, то выскакивает сообщение об ошибке «Данный логин запрещен в системе» и система не регистрирует пользователя.

Все возможные события, которые знает Битрикс можно посмотреть в официальной документации.