Схема проста
Создаём следующую структуру:
Иерархия папок и файлов с обработчиками внутри HelperEventHandlers следующая:/HelperEventHandlers/[модуль]/[событие]/[название, которое можно было бы дать обработчику при классическом расположении, т.е. в init.php или handlers.php ].php
Пример: /HelperEventHandlers/iblock/OnBeforeIBlockAdd/FixIBlockPermissions.php
Пример файла FixIBlockPermissions.php с обработчиком:
Название обработчика формируется по следующей схеме:
[модуль]\_[событие]\_[название, которое можно было бы дать обработчику при классическом расположении, т.е. в init.php или handlers.php]
После установки этого пакета EventHandlersLoader.php подключается в init.php
Там же используем следующий метод:`EventHandlersLoader::includeEventHandler();` - подключение всех обработчиков
`EventHandlersLoader::includeEventHandler("iblock_OnBeforeIBlockAdd_FixIBlockPermissions");` - подключение обработчика iblock_OnBeforeIBlockAdd_FixIBlockPermissions
Посмотреть список доступных обработчиков можно при помощи метода
`EventHandlersLoader::getEventHandlersInfo();`
Содержимое EventHandlersLoader.php :
Создаём следующую структуру:
Иерархия папок и файлов с обработчиками внутри HelperEventHandlers следующая:/HelperEventHandlers/[модуль]/[событие]/[название, которое можно было бы дать обработчику при классическом расположении, т.е. в init.php или handlers.php ].php
Пример: /HelperEventHandlers/iblock/OnBeforeIBlockAdd/FixIBlockPermissions.php
Пример файла FixIBlockPermissions.php с обработчиком:
/** * перед добавлением инфоблока * * даем права на инфоблоки на чтение по умолчанию */ AddEventHandler("iblock", "OnBeforeIBlockAdd", "iblock_OnBeforeIBlockAdd_FixIBlockPermissions"); function iblock_OnBeforeIBlockAdd_FixIBlockPermissions(&$arFields) { $filter = array(); $rsGroups = CGroup::GetList(($by = "c_sort"), ($order = "desc"), $filter); while ($arGroup = $rsGroups->Fetch()) { if ($arGroup['ANONYMOUS'] == 'Y') { $group_id = $arGroup['ID']; break; } } $arFields['GROUP_ID'][$group_id] = "R"; } |
[модуль]\_[событие]\_[название, которое можно было бы дать обработчику при классическом расположении, т.е. в init.php или handlers.php]
После установки этого пакета EventHandlersLoader.php подключается в init.php
Там же используем следующий метод:`EventHandlersLoader::includeEventHandler();` - подключение всех обработчиков
`EventHandlersLoader::includeEventHandler("iblock_OnBeforeIBlockAdd_FixIBlockPermissions");` - подключение обработчика iblock_OnBeforeIBlockAdd_FixIBlockPermissions
Посмотреть список доступных обработчиков можно при помощи метода
`EventHandlersLoader::getEventHandlersInfo();`
Содержимое EventHandlersLoader.php :
class EventHandlersLoader { /** * @param $strHandlerName * подключение обработчика события */ public static function includeEventHandler($strHandlerName) { if ($strHandlerName) { $arHandlerName = explode("_", $strHandlerName); require_once(__DIR__ . '/HelperEventHandlers/' . $arHandlerName[0] . '/' . $arHandlerName[1] . '/' . $arHandlerName[2] . '.php'); } else { $directory = new \RecursiveDirectoryIterator(__DIR__ . '/HelperEventHandlers/'); $iterator = new \RecursiveIteratorIterator($directory); foreach ($iterator as $info) { if ($info->getFilename()[0] === '.') continue; require_once ($info->getPathname()); } } } /** * @param string $inEncode * @param string $outEncode * список доступных для подключения обработчиков событий */ public static function getEventHandlersInfo($inEncode = "utf-8", $outEncode = "windows-1251"){ $directory = new \RecursiveDirectoryIterator(__DIR__ . '/HelperEventHandlers/'); $iterator = new \RecursiveIteratorIterator($directory); foreach ($iterator as $info) { if ($info->getFilename()[0] === '.') continue; $fileContent = file_get_contents($info->getPathname()); $tokens = token_get_all($fileContent); echo iconv($inEncode, $outEncode, $tokens[2][1]) . "<br>" . $tokens[12][1] . "<hr>"; } } } |