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

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

Как было сказано в предыдущих статьях PrestaShop позволяет создавать модули, предназначенные для изменения отображаемого содержимого или реакции на события.

Механизм хуков позволяет модулям реагировать на определенные события или выводить содержимое в фронт или бэк офисе. Таким образом хуки можно разделить на:

  • Обработчики событий (например отправка email при регистрации пользователя или оповещение о добавлении заказа)
  • Визуальные хуки (предназначенные для отображения содержимого, например в левой колонке)

Иногда визуальный хук можно использовать также в качестве обработчика события (например фиксировать заход на главную страницу с помощью обработки хука «home»). При этом модуль не обязан возвращать какое-либо визуальное содержимое.

В стандартной теме PrestaShop для главной страницы можно выделить следующие визуальные хуки:

  • header - класс FrontController
  • top - класс FrontController
  • leftColumn - класс FrontController
  • home - контроллер IndexController
  • rightColumn - класс FrontController
  • footer - класс FrontController

В каждом хуке может быть расположено неограниченное количество независимых друг от друга модулей.

Использование хуков

Прежде всего для правильного использования хуков в классе нашего модуля нужно создать не статический public метод, название которого начинается с ключегового слова «hook» и имени спользуемого хука (например для хука «home» метод будет выглядеть как «hookHome»). В созданный метод передается только один аргумент - массив различных параметров, зависящих от хука.

public function hookNameOfHook($params)
{
	//...
}

Вторым шагом является регистрация модуля в хуке. Это можно сделать вручную на вкладке Модули/Позиции, либо при установке модуля выполнить автоматическую регистрацию.

public function install()
{
	return parent::install() && $this->registerHook('NameOfHook');
}

При удалении модуля нет необходимости в удалении регистрации в хуке, PrestaShop очистит информацию об этом самостоятельно.

Также можно использовать чужие хуки в собственном модуле. Это можно сделать вызвав функцию hookExec.

$params = array( 
	'param_1' => 'value_1' , 
	'param_2' => 'value_2' , 
	); 
Module :: hookExec ( 'NameOfHook' , $params );

Добавление нового хука

Для начала новый хук нужно добавить в таблицу хуков. Сделать это можно двумя способами. Добавлением при помощи класса Hook:

$hook = new Hook();
$hook->name = 'NameOfHook';
$hook->add();

Либо прямой записью в базу данных (более гибкий способ):

INSERT INTO `ps_hook` (`name`, `title`, `description`, `live_edit`) 
	VALUES ('nameOfHook', 'Name Of Hook', 'It is a custom hook !', 1);

Затем добавим в контроллер или класс вызов созданного нами хука. Например для создания визуального хука, действующего во всем фронт-оффисе переопределим класс FrontController следующим образом:

<?php
class FrontController extends FrontControllerCore
{
	public function displayHeader()
	{
		self::$smarty->assign('HOOK_NameOfHook', Module::hookExec('NameOfHook'));
		parent::displayHeader();
	}
}

Дальнейшие действия по регистрации модуля в хуке и его обработке аналогичны, выполняемым при использовании уже существующего хука.

Обсуждение

paha, 2012/10/11 17:45

В чем же плюс хуков?

Garry, 2013/11/05 13:04

Полная французская жопа с этими хуками, хук это вообще-то боксерский удар в ухо. Неужели нельзя сделать элементарный плагин размещения модуля в любом месте темплейта

shov, 2014/06/27 17:03

Хук (hook) это крюк, перехват (англ.) А боксерский удар ПРОСТО тоже так назвали, тк траектория похожа. В разработке ПО hook это давно устоявшиеся понятие. Вместо того, чтоы бы демонстрировать свою безграмотность сходи на google.

Siva, 2015/03/15 07:20

Ты ебало завали своё, умник ёбаный.

Дмитрий, 2020/03/13 12:19

Слышь, быдло конченое, шло бы ты отсюда нахуй.

апа, 2021/08/13 11:52

чорт съеби накуй отсюад

Shpion, 2014/04/25 16:06

Весь Престашоп - французкая жопа, даже не французкая, а нигерийская, такой же темный и не проглядный.

seoshark, 2014/09/16 15:55

У людей с кривыми руками любая CMS будет жопой). Не надо гнать на CMS, из бесплатных одна из лучших.

alex, 2014/10/07 14:41

Shpion, 2014/04/25 12:06 Весь Престашоп - французкая жопа, даже не французкая, а нигерийская, такой же темный и не проглядный.

гениально, лучше и не сказать !!! !!! !!!

выаыва, 2015/03/27 10:36

пидорские хуки, нахуй всё так замудрили долбаебы

Дмитрий, 2015/05/12 14:30

Школота негодуэ

Тётя Мотя, 2015/05/27 04:34

Скажите,пожалуйста, а каким образом в дефолтном шаблоне Престашопа 1.6 в меню категорий из 3-х кнопок(wooman, dress, t-shirts) можно добавить ещё несколько? Ну, например, если мегаз будет не только одёжный, а ещё и с электроникой и инструментом. И как убрать или отредактировать надписи внизу главной страницы под иллюстрациями? Как и где настраиваются значения, чтобы все контакты на этом шаблоне отображались мои, а не предустановленные. Пример вот,расположен справа от модуля фейсбука: Контактная информация My Company, 42 avenue des Champs Elysées 75000 Paris France Звоните нам: 0123-456-789 E-mail: sales@yourcompany.com Я ещё новичок в этом,поэтому такие очевидные вещи спрашиваю.Спасибо за неравнодушие.

Вася, 2015/06/17 23:12

ПолужирныйМодули-Главное горизонтальное меню

Юрий, 2016/05/27 10:52

Очень удобная и гибкая система хуков, но если ты ДЦПшник то что хуки, что просто позиции как в уродской Joomle тебе не понять.

Рома, 2017/04/17 23:14

Такого говнокода как в движке престашопа 1.6 уже не видел лет 5. К сожалению пришлось столкнуться с этой хренью. Разработчики мудаки которые игнорируюют все полезные практики и здравый смысл. Да в этом движке тоже можно разобраться, но ощущения такие как будто ныряешь с головой в дерьмо.

Ioann, 2017/04/19 01:46

Школота детектед…

Андрей, 2017/07/17 08:10

Согласен переМУДрИЛИ с этими хуками, для них чем сложнее тем больше денег можно срубить.

Виктор, 2019/09/11 13:31

Статья говно просто, все намного проще. Добавляем хук путем записи в ps_hook (запрос уже немного неактуален, поля live_edit уже нет). Дальше в админке в разделе дизайн→расположение блоков прикрепляем модуль к нужному хуку. Дальше в шаблоне вставляем хук вот таким образом {hook h='displayTop'}, где displayTop имя хука.

Виктор, 2019/09/11 13:31

Статья говно просто, все намного проще. Добавляем хук путем записи в ps_hook (запрос уже немного неактуален, поля live_edit уже нет). Дальше в админке в разделе дизайн→расположение блоков прикрепляем модуль к нужному хуку. Дальше в шаблоне вставляем хук вот таким образом {hook h='displayTop'}, где displayTop имя хука.

Хутин Пуй, 2021/06/14 22:32

Мудазвоны ебучие. Вы можете, блядь, понятно объяснить тему про хуки? Сначала объяснить, что и зачем надо, а потом писать свои ебучие примеры кода. Алкашня на Расеи совсем потеряла способность внятно излагать свои мысли. Пук тыц пырдыц ставим хук, блядь ебук через метод класса. Нахуя такие объяснения?

Ваш комментарий. вики-синтаксис разрешён:
RLMDO
 
mexanizm-xukov.txt · Последние изменения: 2015/12/27 16:22 (внешнее изменение)