Менеджер событий (EventManager) — это централизованный механизм регистрации, обработки и управления событиями. Он обеспечивает гибкость и удобство работы с событиями в рамках D7 API.
Основные функции EventManager
- Регистрация событий: Позволяет "подписаться" на события, происходящие в системе.
- Обработка событий: Связывает определенные действия (обработчики) с событиями.
- Управление событиями: Легко управлять подключенными обработчиками (добавлять, удалять или изменять их порядок).
Пример: при обновлении элемента инфоблока система генерирует событие OnAfterIBlockElementUpdate. В этот момент проверяется, есть ли подписанные обработчики для данного события. Если такие обработчики существуют, они будут вызваны менеджером событий в порядке их добавления.
Как зарегистрировать обработчик?
Регистрация обработчика событий выполняется с помощью метода EventManager::getInstance() класса Bitrix\Main\EventManager;:
EventManager::getInstance()->addEventHandler(
moduleName, // Модуль, в котором происходит событие
eventName, // Имя события
callback, // Обработчик (функция или метод)
sort = 100, // Приоритет вызова (чем ниже число, тем раньше вызывается)
);
- moduleName — модуль, событие которого обрабатывается (например, "main" или "iblock").
- eventName — имя события (например, "OnBeforeUserUpdate").
- callback — функция или метод, который вызывается для обработки события.
- sort — порядок вызова обработчиков. Чем ниже число, тем раньше вызывается обработчик.
- arguments — дополнительные параметры (редко используются).
Пример использования EventManager
Представим, что при изменении элемента инфоблока нужно автоматически задать дату начала активности как текущую дату, а дату завершения активности — через 14 дней.
Для этого используем событие модуля "iblock" OnAfterIBlockElementUpdate. Код размещаем в файле init.php:
use Bitrix\Main\EventManager;
use Bitrix\Main\Loader;
// use Bitrix\Iblock\Elements\ElementTable;
use Bitrix\Main\Type\DateTime;
// Регистрируем обработчик через EventManager
EventManager::getInstance()->addEventHandler(
"iblock",
"OnAfterIBlockElementUpdate",
["UpdateBulletinsElements", "onAfterIBlockElementUpdateHandler"]
);
class UpdateBulletinsElements
{
// Обработчик события
public static function onAfterIBlockElementUpdateHandler(&$arFields)
{
if ($arFields['ACTIVE'] === 'Y') {
if (!Loader::includeModule('iblock')) {
return;
}
$currentDate = new DateTime();
$dateActiveFrom = $currentDate->toString();
$dateActiveTo = $currentDate->add('14D')->toString();
// Обновляем элемент инфоблока
$el = new CIBlockElement();
$el->Update(
$arFields['ID'],
[
'ACTIVE_FROM' => $dateActiveFrom,
'ACTIVE_TO' => $dateActiveTo
]
);
// if (!$el->isSuccess()) {
// $errors = $result->getErrorMessages();
// AddMessage2Log('Ошибка обновления элемента: ' . implode(', ', $errors));
// }
}
}
}
Менеджер событий в 1С-Битрикс — это мощный инструмент для управления бизнес-логикой. Он позволяет гибко обрабатывать системные события, добавлять свою логику и интегрировать платформу с внешними сервисами.