Как обработать хук движка

Каждое событие инициированное хуком MG::createHook() мы можем перехватить с помощью функции MG::addAction() в файлах плагинов и файле functions.php

Пример обработки хука без параметров:

Давайте в файле пользовательских функций шаблона functions.php напишем функцию

function startEngine(){ echo 'Произошло событие mg_start'; }

А следом назначим ее в качестве обработчика хука mg_start иницируемого в файле mg-core/mg-start.php при запуске движка.

Хук mg_start инициирован следующим способом: MG::createHook('mg_start');  и не находится в теле функции, поэтому передаваемых данных для него не существет и назначить обрабочтик можно без указания дополнительных параметров:

MG::addAction('mg_start''startEngine');

Теперь при обновлении страницы сайта мы будем видеть надпись 'Произошло событие mg_start' выведенную в результате работы пользовательской функции startEngine().

Пример обработки хука с параметрами: 

Попробуем обработать событие models_order_updateorder созданное в методе updateOrder() класса Models_Order таким образом:

return MG::createHook( __CLASS__ ."_"__FUNCTION__$result, func_get_args());

Для обработки хука подобного вида нам потребуется функция принимающая массив исходных данных из метода updateOrder(), а также результат его работы.

<?php 
// пользовательская функция для обработки событий
// в параметр $arg будет передан массив с результатом исходной функции и ее вход. 
// параметрами.
 function userFunction($arg){ 
 	// viewData($arg);
	$arg['result'] = array(‘обработанные по своему данные’);
 return $arg['result']; 
}
?>

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

Функция обработчик обязательно должна:

  • возвращать какой-то результат;
  • иметь единственный входящий параметр $arg  

Впараметре $arg всегда будет содержаться массив:

<?php
array(
result =>'результат выполнения исходной функции',
arg =>'массив аргументов переданный в исходную функцию'
)
​​​​​​​?>

Посмотреть, что передается в параметр $arg всегда можно, из описанных тут способов.

Подготовив пользовательскую функцию нужно назначить ее в качестве обработчика хука следующим образом:

<?php MG::addAction('models_order_updateorder','userFunction',1,20);?>
  • models_order_updateorder – название хука метода updateOrder() класса Models_Order.
  • userFunction — пользовательская функция-обработчик
  • 1 - единица, переданная третьим параметром, указывает на то что в функцию UserFunction, нужно передать результат работы updateOrder() и исходные аргументы.
  • 20 - Последний параметр, определяет приоритетность выполнения обработчика, другими словами назначает номер очереди. Поскольку для одного хука может существовать неограниченное количество обработчиков, то возникает потребность в использовании приоритетов их выполнения. Данный параметр не обязательный, и по умолчанию имеет значение 10.

Внимание!
Названия хуков методов формируются из названия класса и названия метода в нижнем регистре, объединенных через символом нижнего подчеркивания _ : models_order_updateorder , category_addcategory, mg_getbuffer, models_catalog_getlist и т.п.

Комментарии

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

Получать уведомления о новых коментариях:
Загрузить все