Структура модуля PrestaShop


Данная статья по структуре модуля — является вводным уроком к циклу постов о создании модуля для PrestaShop (например, вывод графика работы). Разрабатывать мы будем модуль для версии PrestaShop 1.5, но в чём отличие структуры от 1.4 я буду указывать, поэтому этот мануал можно использовать для обеих версий.

Раньше (в версиях PrestaShop 1.4) для добавления нового модуля зачастую приходилось дописывать функционал в контроллеры, классы и т.п. Теперь, как будет показано ниже при рассмотрении структуры модуля, всё сосредоточено внутри одной папки и имеет прозрачное и логичное расположение файлов, соответствующее постулатам mvc.

Кстати на блоге wp.clean я уже публиковала обзор этой модели в рамках движка: PrestaShop инструкция для разработчиков

Структура модуля PrestaShop:
1. Корневой папки, называемой так же как и сам модуль (маленькими буквами). Папка расположена в директории /modules
2. Главного php файла (Bootstrap файл), который называется так же как папка и модуль
3. Файл иконки для админки:
— для PrestaShop 1.4: logo.gif, 16*16 px
— для PrestaShop 1.5: logo.png, 32*32 px
4. config.xml — файл конфигурации, создаётся автоматически при установке модуля
5. Если модуль выводит информацию на сайте — создаём для него шаблон .tpl, обычно файл называется так же как модуль. Если в зависимости от места (хука) различается разметка шаблона, то в название дописывают хук, т.е mymodule_home.tpl. В случае 1.4 все tpl размещались в корне модуля. Начиная с 1.5 и далее структура модуля стала соответствовать принципам mvc и для шаблонов выделили отдельную папку.
/views/css — размещаем все стили модуля
/views/js — соответсвенно папка для скриптов
/views/templates/front — шаблон для отображения данных в фронт офисе магазина
/views/templates/hooks — используется в случае, если отображение и вывод данных зависит от хука (например, вы решили вывести реквизиты в шапке и подвале)
6. Языковой файл ru.php, в PrestaShop 1.4 опять таки размещался в корне, в PrestaShop 1.5 — в специальной папке /translations
7. /controllers — если для работы модуля нужен специальный контроллер
8. /override — если для работы модуля нужно дописать функционал базового класса

Обратная совместимость структуры для модулей в PrestaShop 1.5 присутсвует, так разработчики до сих пор используют в дистрибутиве множество модулей со старой структурой (хочу заметить, что речь идёт именно о структуре, вызов многих методов и свойств изменился, поэтому полной обратной совместимости модулей нет).

Для наглядности приведу несколько примеров структуры файлов в модулях:

Для работы модуля оплаты (modules/bankwire) требуются собственные контроллеры — осуществляющие валидацию информации и передачу результатов пользователю — поэтому мы видим соответствующие классы в папке /controllers. Для предоставления обработанной контроллером информации пользователю нужны шаблоны, их мы видим в папке /views/templates/front

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

В примере видно, что модель не вынесена в отдельный класс (файл BlockCMSModel.php), а файлы шаблонов перемешаны — что то вынесено в отдельную папку /views/templates (form.tpl), а некоторые файлы так и остались валяться в корне.

В следующем уроке мы создадим собственный модуль и выведем его в админке.