В чем отличие хука от зоны для вывода блока

Объясните, пожалуйста, чем отличается хук от зоны для вывода блоков?

С блоками мне все понятно: в нужном месте задаю новую зону

{include file='blocks.tpl' group='topic-bottom'}

и вывожу туда любые блоки, причем в конфиге могу гибко настроить их вывод. А в чем преимущества хуков?

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

avatar
Хуки нужны для вывода данных из плагинов, в то место где прописан хук.
avatar
Так с тем же успехом и в блок данные можно вывести.
avatar
Блок надо добавит, а хуки стандарны, многие плагины используют. Меньше телодвижений.
avatar
Однако если шаблон нестандартной структуры, хуки создают проблемы в адаптации плагинов, тут или напрямую в шаблон, или блоком.
avatar
Это понятно, интересуетт больше техническая сторона.
avatar
И, чувствую, что только зарезервированным местом для вывода какой-то своей информации хуки не ограничиваются…
avatar
Не верно понял желаемое. То-то удивился такой вопрос от вас читать.
avatar
Хуки уже есть, а блоки нужно добавлять. Вопрос поддержки и обратной совместимости.
avatar
Т.е. это единственное различие?
avatar
На мой взгляд наиболее существенное.
Ну еще семантика.

Набор переменных можно передать и туд и туда, если не ощибаюсь.
Ну и чисто формально, функционал хука и инклуд произвольного файла (или конкретного) — механизмы разные. Значит и скорость разная. А что быстрее и экономичнее — нужно тестировать.
avatar
Товарищи,
{include file='blocks.tpl' group='topic-bottom'}

выведет заранее созданный блок с именем topic-bottom?
avatar
группу блоков
avatar
Понял, группу аля right, блоки в которую помещаются через указание из в конфиге.
А если у меня не плагин, а шаблон, тоо смысл создавать группу блоков?
avatar
Ну можно ведь и какие-то блоки из сайдбара перенести в другое место, или заранее зарезервировать место под вывод в шаблоне блоков каких-либо плагинов (ТОР-топиков, например).
avatar
Спасибо!
avatar
Нет, появиться просто новая зона topic-bottom для вывода в ней любых блоков.

К примеру, сайдбар — это зона right и в конфиге при настройке блоков прописана она. Если добавить вышеуказанный инклуд в какое-нибудь место шаблона и в конфиге для любого блока изменить right на topic-bottom выбранный блок выведется вместо сайдбара именно в этой зоне.

Вместо topic-bottom можно написать что угодно.
avatar
Спасибо за развернутое объяснение. Последняя строчка явно лишняя :)
avatar
у хуков, например, нет приоритета, а у блоков — есть.
в каком порядке плагины активированы — в таком будут выводить в хуке свои данные.

у блоков есть доп. параметры, обрабатываемые самим движком: экшены и эвенты для показа, приоритет, пути показа.
у хуков «точка вывода» и все проверки нужно писать в обработчике хука: сверка экшена и эвента (если нужна) и т.п.
поэтому практически блоки — это высшая степень эволюции хуков: все тоже могут что и хуки + уже некоторые встроенные опции настройки блока.
avatar
по-хорошему уже пора философски пересмотреть, учитывая новые возможности наследования шаблонов, хуки и блоки и выбрать что-то единое.
avatar
Ок, спасибо. Меня просто постоянно смущало то, что блоки в настройке такие гибкие, а в движке везде прописаны хуки. А так как о хуках особо ничего не знал, то думал что в них кроется еще какой-то неизвестный мне потенциал и они на порядок выше блоков. Собственно, поэтому и решил задать вопрос.
avatar
хуке в движке — не только шаблонные, некоторые вещи быстрее и проще делать через хуки — кнопку добавить, поле.

все зависит от задач
avatar
в каком порядке плагины активированы — в таком будут выводить в хуке свои данные
а я вроде экспериментальным путем обнаружил, что циферкой в строке ниже можно задавать приоритет
$this->AddHook('bla_bla_bla', 'BlaBlaBla', __CLASS__, 100);
avatar
вы правы. я забыл об этом.
avatar
но тут хочу также добавить, что у блоков в конфиге приоритет и им можно более легко оперировать, а для хуков приоритет в коде.
avatar
Можно ли плагином в место хука вставить группу блоков {include file='blocks.tpl' group='somegroup'}?
avatar
Если вопрос ко мне, то я не подскажу — не программер. Попробуйте. По идее, почему бы и нет?
avatar
напрямую отрендерить в локальной копии вьюера куда передать параметр group и вернуть через хук
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.