Как научить свой модуль Битрикс вызывать самого себя

Такой себе «хак» для того, что бы не вызывать Loader::includeModule(); в коде проекта, если нужно что бы модуль подключался на всех страницах сайта. Сейчас я пробую практику, когда все функции, обработчики и константы упаковываю в модуль. Соответственно, нужно что бы модуль вызывался на всех страницах сайта, но самостоятельно вызывать его не очень хотелось. В голову пришло такое решение:

    1. В install/index.php, в методе InstallIvents() (его нужно вызывать из DoInstall()) нужно зарегистрировать событие модуля:
      Bitrix\Main\EventManager::getInstance()->registerEventHandlerCompatible(
          'main',
          'OnBeforeProlog',
          $this->MODULE_ID,
          '\Project\EventHandlers\MainHandlers',
          'loadModule'
      );
      
    2. В методе UnInstallEvents() (который следует дёрнуть из DoUninstall()) нужно «убрать» за собой
      Bitrix\Main\EventManager::getInstance()->unRegisterEventHandler(
                  'main',
                  'OnBeforeProlog',
                  $this->MODULE_ID,
                  '\Project\EventHandlers\MainHandlers',
                  'loadModule'
              );
      
    3. Собственно, в \Project\EventHandlers\MainHandlers код загрузки
          /**
           * @throws \Bitrix\Main\LoaderException
           *
           * @return void
           */
          public static function loadModule(): void
          {
              Loader::includeModule('module_name');
          }
      

 

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *