Иногда бывает необходимо повлиять на ход выполнения какой-нибудь 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 (подробнее см. порядок выполнения страниц).
Подробнее о месте возникновения и возможностей применения смотрите в описании каждого события.
См. также
- AddEventHandler
- RegisterModuleDependences
- Взаимодействие модулей
- Список событий главного модуля
- Порядок выполнения страниц
Пользовательские комментарии
Пользовательские комментарии не являются официальной документацией. Ответственность за их использование несет сам пользователь.Добавлять комментарии могут только зарегистрированные пользователи. Сообщения для просмотра появляются после модерации.

