Обработка и вызов событий (не 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');

Интеграция с iiko и rkeeper, готовый сайт ресторана

См. также:

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