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

30
В продолжении топиков 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
  • +9
  • 09 мая 2009, 22:15
  • ort

Комментарии (16)

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