апреля 17, 2013

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


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

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

Кстати на блоге web-esse.ru я уже публиковала обзор этой модели в рамках движка: 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), а некоторые файлы так и остались валяться в корне.

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


Комментарии

  • Евгений

    Давно читаю Ваш блог, но пишу впервые. Может забегу немного вперед темы, просто мой вопрос актуальный сейчас.Пробую переделать свой модуль Яндекс карты(аналог модуля наши магазины) версии 1.4 на 1.5, так вот согласно документации разработчиков Prestashop 1.5 для внедрения шаблона модуля в тему, необходимо создать одноименные файлы как у них в примере display.php и display.tpl и поместить их в соответствующие директории /controllers/front/ и /views/templates/ все делаю как указано в примере, но ссылка на локальном сервере http://мой сайт/index.php?controller=display выдает 404 ошибку. В чем моя ошибка или упущение?