В Prestashop 1.5 всплыл новый способ добавлять Хук, который не требует переопределения и запросов к Базе Данных. К сожалению он не задокументирован в официальных мануалах Престы. Так что давайте посмотрим как это делается.
Для начала можно ознакомиться с видео инструкцией.
Подробнее в текстовой форме и на русском.
Старый синтаксис добавления Хуков против Нового.
Если вам нужно было добавить Хук в Prestashop1.4, вы должны были дописать нечто подобное
INSERT INTO `ps_hook` (`name`, `title`, `description`) VALUES ('category', 'Category', 'Hooks before the product list in a category'); |
в вашу базу данных чтобы добавить Хук, а затем переопределить один из контроллеров для регистрации его выполнения, как-то так:
Class FrontController extends FrontControllerCore { public FUNCTION displayHeader() { IF (!SELF::$initialized) $this->init(); SELF::$smarty->assign('HOOK_CATEGORY', Module::hookExec('category')); parent::displayHeader(); } } |
И это было настолько ужасно, заставляло нас использовать переопределение почти для каждого места, которое не имело собственный HOOK.
К счастью, однако по некоторым причинам «секретно», новый и более простой способ был озвучен, и, по существу, нужно просто добавить в файл шаблона:
{hook h='beforeFooter'} |
Обнаружено это было совершенно случайно, рыская по различным форумам, и наткнувшись на пост разработчика ядра Prestashop господина F.S.
Пример: добавляем новый HOOK вперые
Ну что же, целью этого примера будет просто дописать какой-либо текст сразу над footer-ом. Для этого открываем themes/default/footer.tpl и сразу после {$HOOK_FOOTER} добавляем следующее:
{hook h='beforeFooter'} |
Название, естественно, на ваше усмотрение. На самом деле ничего кроме регистрации этого Хука (как и любого другого) и не надо делать.
Откройте любой уже установленный модуль, к примеру blocknewsletter.php. Я использую его исключительно в демонстрационных целях, вы можете использовать любой, какой захотите. В конце файла добавьте обыкновенную функцию HOOK-а.
public FUNCTION hookBeforeFooter($params) { RETURN 'Привет, Преста!'; } |
Функция теперь существует, однако этот модуль не зарегистрирован как часть данного Хука. Мы по прежнему не сможем расположить его из админ-панели на новый хук. При первом создании Хука, он хотя бы раз должен быть зарегистрирован из модуля. Для этого, как и для любого другого Хука мы можем использовать стандартный registerHook. В функции установки в модуле ( install() ) добавляем регистрацию, выглядеть это будет так:
IF (parent::install() == FALSE || $this->registerHook('leftColumn') == FALSE || $this->registerHook('beforeFooter') == FALSE || $this->registerHook('header') == FALSE) RETURN FALSE; |
Повторюсь, это всего лишь пример, следующая часть является очень важной (Если вы знаете как создавать модули и регистрировать Хуки – вы не откроете для себя ничего нового).
$this->registerHook('beforeFooter') |
Возвращайтесь в панель модулей и перезагрузите наш модуль (или установите его, если он не установлен). Обновите страницу магазина и вы увидите текст «Привет, Преста!» там, где ему и место.
Вот и все, надеемся вам помогла данная инструкция по добавлению Хука на Престашоп.