Forums / National / Russian / Модули и плагины / Система Hooks. Принцип работы.

Gunslinger
#1 2010-01-29 21:59
Прочитал соответствующие статьи по плагиностроению в разделе документации, но так до конца и не понял, как именно коректно использовать эту систему при написании плагина. Может ли кто-то четко, понятно для простого смертного и пошагово (желательно на примере) пояснить каким образом работает хук и как к нему грамотно "пристроиться" с плагином? Буду крайне признателен за помощь. И, думаю, что не я один.

П.С.
Просьба не отфутболивать в режим поиска. Юзал и неоднократно. Раз поднимаю тему снова, значит удобоваримого пояснения для себя не нашол.
esclkm
#2 2010-01-30 00:36
я, знаешь обычно коронтко и коряво. но попытаюсь пояснить
ты раз смотрел хаки ядра то видел, что есть довольно подобные строки кода.

/* === Hook === */
	$extp = sed_getextplugins('forums.posts.newpost.first');
	if (is_array($extp))
	{ foreach($extp as $k => $pl) { include_once($cfg['plugins_dir'].'/'.$pl['pl_code'].'/'.$pl['pl_file'].'.php'); } }
	/* ===== */
это и есть место включения хука. первая строка читает все плагины - у которых в свойствах указан хук с данным именем в данном случае forums.posts.newpost.first
последующие строки подключают все файлы с данным хуком.
про описания в файле плагина верхних строк писалось тут http://www.seditio.by/page.php?al=cotonti_multihooks

то есть в данном месте - пошагово проинклюдились все файлы. Сответственно чтобы грамотно сделать надо смотреть код файла к которому мы подключаем - тогда знаем чем мы можем варьировать в этой ситуации

исключения среди хуков: standalone, tools, ajax

что не понятно поямнил задавай вопросы.
littledev.ru - мой маленький зарождающийся блог о котонти.
снижение стоимости программирования и снижение стоимости производства разные вещи. Первое можно скорее сравнить с раздачей работникам дешевых инструментов, чем со снижением зарплаты
Gunslinger
#3 2010-01-30 03:27
esclkm, ок. Момент подгрузки модулем файлов с хуком ясен. Спасибо.

Теперь ряд следующих вопросов (по ним хотелось бы максимально подробное пояснение):

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

2. Возможно ли (может это и глупость, но все-таки) с использованием хуков передавать данные из запроса в основном модуле плагину? (многие плагины, например для форума, повторяют в своем тексте запрос к той же таблице что и основной модуль, разница только в наборе полей)

3. Если можно, то немного подробнее о порядке выполнения кода из разных плагинов по одному хуку. Как именно задается очередность выполнения плагинов и каковы ограничения относительно таких очередностей?

4. Возможно так же покажется глупостью, но все же просьба прокоментировать. Возможно ли в некий узловой плагин вставить используя механизм хуков такие же точки расширения как в глобальных модулях? Для более гибкого подключения к одному плагину нескольких других, сходных по функционалу или области применения.
This post was edited by Gunslinger (2010-01-30 03:37, 14 years ago)
Dayver
#4 2010-01-30 03:52
# Gunslinger : esclkm
3. Если можно, то немного подробнее о порядке выполнения кода из разных плагинов по одному хуку. Как именно задается очередность выполнения плагинов и каковы ограничения относительно таких очередностей?
Ох что то мне подсказывает вы не внимательно читаете ответы форумчан
# Sergey : .....Однако, плагинов к одной части может быть подключено много, для этого массив $extp, предварительно, сортируется по порядку Order и имени для одинаковых порядков. Исполняются вначале самые меньшие значения. Далее, ответ на мое утверждение "вам еще пока не "по зубам" работать с PHP" следует вызов этого плагина. Фактически оператор include_once (единожды) загружает файл с кодом PHP. Имя и где его искать берутся как раз берутся из условий в массиве $extp и установок всего ресурса в целом ($cfg['plugins_dir']). Условия загрузки формируются при установке плагина, обработкой специальной части плагина Setup...
# Gunslinger : esclkm
4. Возможно так же покажется глупостью, но все же просьба прокоментировать. Возможно ли в некий узловой плагин вставить используя механизм хуков такие же точки расширения как в глобальных модулях? Для более гибкого подключения к одному плагину нескольких других, сходных по функционалу или области применения.
Ответ на этот вопрос в той ветке форума тоже можна прочесть ... времени нет искать точную цитату потому коротко повторю - Да любой плагин может содержать в себе хуки и все будет работать так же как и с хуками в модулях
Pavlo Tkachenko aka Dayver
Gunslinger
#5 2010-01-30 06:50
Dayver
Да внимательно я читаю :) Смотри сюда Меня интересуют такие ответы, а не парафраз в общем контексте другого вопроса. Дополнительные пояснения в той же теме.
booka
#6 2010-03-25 05:37
какая разница между хуками header.main и header.tags? header.main только в <head> </head> отрабатывает, а header.tags куда угодно в header.tpl, но только после <body> ???
booka