Bitrix

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

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

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

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

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

Изменяем файл /bitrix/php_interface/init.php (либо /bitrix/php_interface/#SITE_ID#/init.php если сайтов много. #SITE_ID# — идентификатор сайта в системе), добавляем строки в конец файла:

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, которые нельзя использовать. Если пользователь выбрал нехороший логин, то выскакивает сообщение об ошибке «Пожалуйста, выберите другой логин» и система не регистрирует пользователя.

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

Отставить комментарий

Ваш электронный адрес не будет опубликован.Обязательные для заполнения поля отмечены *

девятнадцать + 11 =