Хуки и обработчики Hook

В Moguta.CMS внедрена система  хуков, их можно называть событиями или крючками. Благодаря хукам можно на любую стандартную функцию из файлов библиотек, контролеров и моделей движка, повесить собственный обработчик и изменить ее поведение.

Примеры хуков

  • mg_start – срабатывает перед формированием страницы движком
  • mg_end – срабатывает после формированием страницы движком
  • models_order_addorder – срабатывает при создании нового заказа
  • models_order_updateorder – срабатывает при изменении заказа

Чтобы иметь возможность повесить обработчик на функцию движка, перед тем как вернуть результат своей работы, она должна создать хук, тем самым заявить во всеуслышание, что она выполнилась и ищет обработчика, который бы скорректировал ее работу.

Для создания хуков в коде библиотек движка предусмотрена статическая функция  MG::createHook(), которая позволяет создает hook, в месте ее вызова следующими способами:

  1. MG::createHook('eventname'); - создает событие с хуком 'eventname' в любом месте программного кода движка.
  2. MG::createHook('eventname', $args); - создает событие с хуком 'eventname' в любом месте программного кода движка, и передает в обработчик массив данных $args.
  3. MG::createHook('eventname', $result, $args); - создает событие перед возвращением результата выполняемой функции. В качестве параметров передается: $result - результат работы выполненной функции, и $args - начальные параметры, которые были переданы на момент её вызова.

    Подобный тип событий чаще всего задается следующим кодом: 
    return MG::createHook( __CLASS__ ."_"__FUNCTION__$result, func_get_args()); } 

    Где __CLASS__ ."_". __FUNCTION__ - строковое название хука в нижнем регистре, состоящее из имени класса, и метода в котором он создан, $result - результат работы исходной функции, func_get_args() – массив входящих параметров в исходную функцию.


Таким образом, если в пользовательских плагинах найдутся функции готовые скорректировать или полностью заменить алгоритм работы метода класса ядра, то они все будут вызваны в соответствии с заданным приоритетом.

Комментарии

Имя:
E-mail:
Введите текст с картинки: Введите текст с картинки