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

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

Как было сказано в предыдущих статьях 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

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

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

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

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