Механизм хуков в движке

В продолжении топиков LiveStreet как платформа для модулей и Тест хуков в движке появилась поддержка хуков.

Использовать можно так:
1. В любом месте(модуле, экшене) установить вызов необходимого хука на метод модуля
$this->Hook_AddExecModule('topic_show','Test_MyHookRun',10);
регистрирует на событие topic_show вызов метода MyHookRun у модуля Test с приоритетом 10.
2. В любом месте установить вызов хука на функцию
$this->Hook_AddExecFunction('topic_show','var_dump',-5);
регистрирует вызов функции var_dump
3. Создать класс хука в каталоге /classes/hooks/ с именем файла HookTest.class.php с содержанием
<? 
class HookTest extends Hook {	
	public function RegisterHook() {
		$this->AddHook('topic_show','testHookFunct',__CLASS__,-3);
	}
	
	public function testHookFunct($aVars) {
		var_dump("Hook it!");
	}
}
?>

На данный момент добавлены такие события:
init_action
topic_edit_show
topic_add_show
profile_whois_show
blog_good_show
blog_bad_show
blog_new_show
topic_show
blog_collective_good_show
blog_collective_bad_show
blog_collective_new_show

17 комментариев

avatar
не совсем знаком с программингом :( простите конечно, но в чём соль, может кто нибудь разжувать?
avatar
Хук — ловушка. Если стороннему разработчику нужно что-то изменить в механизме логики системы (а не своего модуля), то ему не нужно будет править системные файлы.
avatar
PS Перехватывает системное событие и делает всё по своему. Вот.
avatar
PPS Делает по своему в своём модуле.
avatar
дак получается в дефолтные хуки никаких объектов не передается? чтоб можно было внести исправления или наоборот добавить чегонить
avatar
глянул свн, вопрос отпал. передается )
avatar
Нужен хук на вход юзера
avatar
Т.е. на авторизацию
avatar
А заодно на создание топика (перед Topic_AddTopic) с объектом oTopic
avatar
А это событие topic_add_show. Или ты имеешь ввиду, уже сабмит топика?
avatar
перед Topic_AddTopic
avatar
А также на регистрацию и редактирование профиля
avatar
Хук на событие init_action — это замечательно. Только вот как бы еще получить имя экшена?
avatar
Router::GetAction()
avatar
Да, уже нашел. Спасибо, Макс
avatar
А как зарегистрировать в своём плагине Hook, чтобы потом можно было к нему обратиться создавая другой Плагин..?
Или это пока нельзя делать…
avatar
Есть ли хук на авторизацию (успешной)? лазил в кодах не нашел либо что то проглядел…
  • Rix
  • 0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.