1C-Битрикс: Управление сайтом

Обработка событий

Иногда бывает необходимо повлиять на ход выполнения какой-нибудь API функции. Но если ее изменить, то эти изменения будут утеряны при очередном обновлении. Для таких случаев и разработана система событий. В ходе выполнения некоторых API функций, в определённых точках установлены вызовы определённых функций, так называемых обработчиков события.

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

Теперь подробнее о регистрации функций-обработчиков:

RegisterModuleDependences - функция для регистрации обработчиков, расположенных в модулях и используются для взаимодействия между модулями системы. Эту функцию необходимо вызвать один раз при инсталляции модуля, после этого функция-обработчик события будет автоматичеки вызываться в определённый момент, предварительно подключив сам модуль.

Пример

// функции обработчики модуля компрессии подключаются дважды - в начале и в конце каждой страницы
RegisterModuleDependences("main", "OnPageStart", "compression", "CCompress", "OnPageStart", 1);
RegisterModuleDependences("main", "OnAfterEpilog", "compression", "CCompress", "OnAfterEpilog");
// инсталлятор модуля рекламы регистирует пустой обработчик // при возникновении события OnBeforeProlog модуль рекламы будет просто подключаться на каждой странице // что сделает возможным выполнять его API функции без предварительного подключения в теле страницы
RegisterModuleDependences("main", "OnBeforeProlog", "advertising");

AddEventHandler - функция предназначена для регистрации произвольных обработчиков, которые не расположены в модулях. Ее необходимо вызывать до возникновения события на тех страницах где требуется его обработать. Например, если событие нужно обработать на всех страницах где оно возникает, то функцию можно вызвать в /bitrix/php_interface/init.php.

Пример

// регистрация обработчика в /bitrix/php_interface/init.php
AddEventHandler("main", "OnBeforeUserLogin", "MyOnBeforeUserLoginHandler");
function MyOnBeforeUserLoginHandler($arFields)
{
   if(strtolower($arFields["LOGIN"])=="guest")
{
global $APPLICATION;
$APPLICATION->throwException("Пользователь с именем входа Guest не может быть авторизован.");
return false;
}
}

Как правило, события делятся по месту возникновения и назначению на следующие группы:
- предназначенные для отмены дальнейшего выполнения метода, например, событие OnBeforeDeleteUser позволяет отменить удаление пользователя при заданных условиях (наличие критических связанных объектов), событие OnBeforeUserLogin - запретить авторизацию пользователю.
- позволяющие выполниться в определённых методах, при завершении их исполнения, например, OnAfterUserLogin - после проверки имени входа и пароля, событие OnUserDelete - перед непосредственным удалением пользователя из БД, позволяет удалить связанные объекты.
- возникающие во время исполнения страницы, для того чтобы включить свой код в определённые места на странице, например, OnBeforeProlog (подробнее см. порядок выполнения страниц).

Подробнее о месте возникновения и возможностей применения смотрите в описании каждого события.

См. также

Пользовательские комментарии

Пользовательские комментарии не являются официальной документацией. Ответственность за их использование несет сам пользователь.

Добавлять комментарии могут только зарегистрированные пользователи. Сообщения для просмотра появляются после модерации.
© «Битрикс», 2001-2012, «1C-Битрикс», 2012