Хуки, хелперы и прочее для чайников

Здравствуйте.

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

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

В связи с этим вопрос: что делают плагины? Они "дежурят", мониторя определенные события, и при срабатывания отслеживаемого события дают какие то входные параметры хуку и указывают в каком месте выполнить этот хук?


А хелпер это тоже самое, что и хук, т.е. тоже типа функция, но она более ограничена во входных параметрах, меньше отдуда может брать данные, меньше что-то может менять, но при этом может располагаться в любом месте кода? Т.е. хук, это что-то типа заранее написанной разработчиком вебасиста фунции, а хелпер- это своя собственная?
Плюсом хука по сравнению с хелпером является то, что он может воздействовать на бОльшее к-во сущностей (на изменение статуса, вывод какого то HTML кода в каком то месте страницы и тд)?

Я правильно вообще это всё понимаю? Чувствую, что не совсем...

Спасибо.

3 ответа

  • 2
    Павел Трофимов 30 января 2018 21:38 #

    Хук. Можно сравнить с поездом Москва - Пхеньян. Любое действие пользователя на сайте - это отправление поезда из Москвы. Момент когда действие завершится - прибытие поезда в Пхеньян. По пути у поезда есть "остановки". Это как раз хуки. Что происходит в этот момент? Фреймворк говорит: Такс... Остановка такая-то. По моим данным тут хотели доложить посылки в Пхеньян такие-то плагины. У меня на руках такие-то данные. Держите. После этого фреймворк по порядку отдает данные всем плагинам которые купили место в этом поезде (подписались на хук), получает от них ответы. Когда все собрано едет дальше, до следующей остановки (следующего хука). В итоге в Пхеньян поезд прибывает уже со всеми собранными по пути данными. В принципе, ваши рассуждения верны, но плагины не дежурят. Они стоят в очереди и ждут когда их позовет фреймворк.

    Хелпер. Вот хелпер - это как раз произвольная функция, разработчик которой разрешил ее вызывать откуда угодно.

    И хуки и хелперы, грубо говоря, можно разделить на 2 группы: интерфейсные и программные. Как следует из названий групп, интерфейсные как-то выводятся в интерфейс и видны пользователю, программные же предназначены исключительно для внутреннего использования и визуально никак для пользователя не видны.

    Ну как-то так, если вкратце....

  • 1
    Семен Семеныч 30 января 2018 22:43 #

    Павел, спасибо.

    Любое действие пользователя на сайте - это отправление поезда из Москвы.

    Нажатие кнопки "Добавить товар в корзину" это же действие?

    Т.е. юзер нажал кнопку, действие запустилось и оно продолжается до того момента как товар лег в корзину?
    А в промежутке времени (и соответственно внутри большого куска кода) между нажатием кнопки "Добавить товар в корзину" и попаданием в корзину есть хуки, на которые подписаны некотороые плагины. В частности на хук cart_add. Так?

    Если кто то подписан на этот хук, то он получает от фреймворка некие данные (название, Id и тд) товара, который добавляется в корзину. Плагин обрабаотывает эти данные и возвращает в хук что то там. Так? А что он возвращает и что может вообще вернуть туда?
    Здесь https://developers.webasyst.ru/hooks/shop/cart_add/ не написано что можно вернуть в этот хук. Написано только что можно передать в плагин: Входящие параметры $item array Массив данных добавленного товара.

    Или это наоборот, то что передается из хука в плагин?
    Или плагин передает что-то не в хук, а куда угодно может? В БД или еще куда-то?

    • +2
      Павел Трофимов Павел Трофимов 30 января 2018 23:01 #

      На все вопросы Так? ответ Да.

      А что он возвращает и что может вообще вернуть туда?

      Плагин должен возвращать те данные и в том формате, который(е) предусмотрены хуком. Т.е. если, например, хук ожидает в ответ получить кусок html кода, то нет никакого смысла отправлять туда, к примеру, массив данных.

      Здесь https://developers.webasyst.ru/hooks/shop/cart_add... не написано что можно вернуть в этот хук

      Стало быть этот хук не предполагает получение обратных данных. Т.е. он просто свистит плагину Алё, тут товар в корзину добавили. Товар такой-то. Если надо - можешь подсуетиться. А плагин уж там пыхтит, что-то внутри себя делает, а потом отвечает: хОКкей, я все понял, что надо сделал, модешь работать дальше.

      Или плагин передает что-то не в хук, а куда угодно может? В БД или еще куда-то?

      Да. Плагин может ничего не возвращать, но при этом соверщать какие угодно манипуляции, в т.ч. и с БД.

  • 1
    Семен Семеныч 30 января 2018 23:30 #

    Спасибо огромное! Стало намного более понятно.

Добавить ответ

Чтобы добавить комментарий, зарегистрируйтесь или войдите