Октябрь 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());
}
Массив параметров также может быть с буквенными индексами:
Тогда в обработчике события можно будет получить параметр по буквенному индексу: