События
Механизм событий связывает независимые части системы: в D7 используются события Bitrix\Main\Event с возвратом EventResult, тогда как классические события ядра (OnBefore*) передают данные массивами по ссылке. Регистрация обработчиков в базе через EventManager::registerEventHandler() сохраняет подписки в таблице b_module_to_module, гарантируя их сохранность при переносах кода.
Прогресс хранится в этом браузере. Войдите, чтобы сохранить его в аккаунте.
Что нужно понимать
-
1
Регистрация обработчиков
-
2
Системные события
-
3
Кастомные события
-
4
Приоритеты обработчиков
Материалы
Официальная документация
Проверь себя
После переноса php_interface с другого проекта обработчик OnSaleOrderSaved перестал вызываться. Почему регистрация в install/index.php модуля от этого защищает?
registerEventHandler() пишет запись в таблицу b_module_to_module, и она не зависит от файлов. AddEventHandler в init.php живёт только пока жив файл. Документация советует постоянную регистрацию при установке модуля.
Обработчик старого события OnBeforeIBlockElementUpdate вызывается, но массив полей внутри пустой или не меняется. Где искать?
В способе регистрации: для событий без объекта Event, где аргументы передаются напрямую и по ссылке, нужен registerEventHandlerCompatible(). Обычный registerEventHandler() оборачивает вызов иначе, и ссылка на массив теряется.
Заказчик хочет запретить закрытие тикета, если есть открытые задачи. Как обработчик D7-события сообщает об этом инициатору?
Возвращает EventResult с типом ERROR и параметрами, например текстом ошибки. Инициатор перебирает getResults() у события и сам решает, что делать; само ядро операцию не остановит.
Два обработчика одного события: ваш должен отработать после того, как модуль подготовил данные. Чем управлять?
Параметром sort при регистрации, по умолчанию 100. Обработчики вызываются по возрастанию sort, и вашему нужно значение больше, чем у обработчика модуля.
Не сходится?
Спросите ассистента BXMax: он знает документацию и материалы сайта по этой теме.
Знаете материал лучше?
Предложите ссылку: после проверки она появится в этом разделе.
Войти, чтобы предложить