Обработка и вызов событий (не ORM)

Модуль расширенного управления меню для битрикс

Октябрь 27, 2017

Теги: События, Модули grain

Примеры обработки и вызова простых событий в ядре d7.

Пример обработки события:


namespace Grain\ForumAccess;


\Bitrix\Main\EventManager::getInstance()->addEventHandler
    
'grain.forum'
    
'OnGlobalsGetForumFilter'
    
'\Grain\ForumAccess\OnGlobalsGetForumFilter'
); 

function 
OnGlobalsGetForumFilter(\Bitrix\Main\Event $event
{
    
$arFilter $event->getParameter(0);
    foreach (
$event->getResults() as $eventResult// получение данных после другого обработчика, если он был
    
{
        if(
$eventResult->getType() == \Bitrix\Main\EventResult::ERROR)
            continue;
        if(
$eventResult->getParameters())
            
$arFilter $eventResult->getParameters();
    }
    
    
$arFilter["SITE_ID"] = array("s1","s2"); // модифицируем массив фильтра, делаем чтобы отображались форумы с двух сайтов: s1 и s2

    
$type $event->getEventType(); //  статус на входе (например, после другого обработчика)

    /*
    также $type мог бы принять значения
    \Bitrix\Main\EventResult::SUCCESS - при успешной обработке
    \Bitrix\Main\EventResult::ERROR - если нужно вернуть ошибку
    */

    
$result = new \Bitrix\Main\EventResult($type$arFilter);
    return 
$result;
}

Пример вызова события:


$event = new \Bitrix\Main\Event("grain.forum""OnGlobalsGetFilter", array($arFilter));

$event->send();
foreach (
$event->getResults() as $eventResult)
{
    if(
$eventResult->getType() == \Bitrix\Main\EventResult::ERROR// если обработчик вернул ошибку, ничего не делаем 
        
continue;
    
$arFilter array_merge($arFilter$eventResult->getParameters());
}

Массив параметров также может быть с буквенными индексами:


$event = new \Bitrix\Main\Event("partner.mymodule""OnMyEvent", array('ENTITY'=>$order));

$event->send();

Тогда в обработчике события можно будет получить параметр по буквенному индексу:


$order $event->getParameter('ENTITY');

См. также:

← Переход к списку