@inviziblll

Как правильно подключить обработчик событий для highload-блоков в своем модуле?

Я пишу свой модуль и в нем нужно добавить функционал логирования событий, которые произошли с элементами highload-блоков при работе сайта, он должен фиксировать количество добавленных/измененных/удаленных элементов.
Как правильно зарегистрировать обработчик?

В файле install/index.php в методе InstallEvents я написал такой код по аналогиb с обработкой событий для других модулей Битрикс:
$eventManager = \Bitrix\Main\EventManager::getInstance();
$eventManager->registerEventHandler('highloadblock','OnBeforeAdd', 'my_module', 'MyModuleClass', 'Handler');


Но у меня сомнения что этот код верный. В примерах для обработки событий highload-блоков указывается имя конкретного highload-блока, а имя модуля вообще не указывается.
$hlblock = \Bitrix\Highloadblock\HighloadBlockTable::getById(12)->fetch();
$entity = \Bitrix\Highloadblock\HighloadBlockTable::compileEntity($hlblock);
$eventManager = \Bitrix\Main\EventManager::getInstance();
$eventManager->addEventHandler('', $entity->getName().'OnAdd', '\Partner\Myentity\OnAdd');

Но как быть если нужно создать универсальный обработчик для всех highload-блоков которые есть или будут созданы в системе?

Я должен обратится к списку highload-блоков, получить все и только затем для каждого блока добавить обработчик? И в каком файле модуля я должен делать такой запрос?
  • Вопрос задан
  • 797 просмотров
Пригласить эксперта
Ответы на вопрос 1
smilingcheater
@smilingcheater
Да, вам надо сначала получить список всех инфоблоков, присутствующих на сайте, замет в цикле повесить обработчики

use Bitrix\Highloadblock\HighloadBlockTable;
use Bitrix\Main\EventManager;

$eventManager = EventManager::getInstance();
$items = HighloadBlockTable::getList([])->fetchAll();

foreach ($items as $item) {
    $eventManager->addEventHandler('', $item['NAME'] . 'OnAfterAdd', [MyModuleClass::class, 'handlerFenction']);
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы