Создание шаблона для PrestaShop. Теория.


Работа с шаблонами в PrestaShop основывается на знании Smarty и особенностей применения Хуков (Hook).

Если Вы когда нибудь работали с шаблонами в других CMS, то знаете, что шаблон состоит из множества файлов, которые собираются в один индексный. Этот файл называется index.php и находится в корне сайта.

Рассмотрим INDEX.PHP. В нём содержится два ключевых момента:

1. Подключение ключевых файлов с помощью php функции include: /config/config.inc.php, /header.php, /footer.php

В конфигурационном файле config.inc.php можно менять значения переменных, например, включение display_errors позволит увидеть ошибки и уведомления.

Подключаемый файл header.php, содержит заголовки, подключение таблицы стилей, определение всех хуков и подключение файла заголовка шаблона, расположенного в папке темы

2. Использование Smarty методов: assign и display

Метод assign назначает значение для переменных. Например, в рассматриваемом файле (index.php) мы видим назначаем для HOOK_HOME значение Module::hookExec(‘home’), теперь в файлах шаблонов можно писать {$HOOK_HOME} для вызова этой переменной.

Здесь мы сталкиваемся с первым важным понятием — Хуки. На самом деле это не новое понятие, хуки уже давно используются и в php и других языках программирования. Общее его значение — добавление собственного кода в существующий, который выполнится при определённых обстоятельствах и может переназначать или расширять действие стандартных функций.

Если вы посмотрите остальные подключаемые файлы(например header.php), то найдёте ещё несколько похожих строк

‘HOOK_HEADER’ => Module::hookExec(‘header’),
‘HOOK_LEFT_COLUMN’ => Module::hookExec(‘leftColumn’),
‘HOOK_TOP’ => Module::hookExec(‘top’),

Данная процедура называется подключением хуков, все используемые хуки (в том числе и самописные) должны быть подключены, по умолчанию это делают в файле header.php

Основные Хуки:

  • HOOK_HOME (главная станица)
  • HOOK_HEADER (заголовки)
  • HOOK_TOP (заголовок сайта)
  • HOOK_LEFT_COLUMN (левый блок)
  • HOOK_RIGHT_COLUMN (правый блок)
  • HOOK_FOOTER (футер сайта)

Таким образом, за отображение любого контента на странице отвечает соответствующий модуль. За позицию модуля в свою очередь отвечает какой либо хук. Поэтому если нам, например, нужно перенести корзину из правого блока в верхний, необходимо зайти в модуль корзины (modules/BlockCart) и добавить регистрацию нового хука.

Подробнее о изменениях положения контента на странице в следующей части.