ModuleFrontControllerCore в Prestashop 1.5

Начиная с версии 1,5 в Prestashop появилась нормальная возможность реализации фронт контроллера для кастомного модуля с помощью добавленного класса ModuleFrontControllerCore, являющегося потомком FrontController.

Основные отличия от обычного FrontController это: тип самого контроллера (свойство controller_type), наличие свойства module, хранящего модуль, породивший этот контроллер и метод getTemplatePath с отличиями в поиске темплейтов.

Отличие в путях которые использует ModuleFrontController::getTemplatePath($template):

1. сначала ищется шаблон по пути название_темы/modules/имя_модуля/сам_шаблон (_PS_THEME_DIR_.'modules/'.$this->module->name.'/'.$template )
2. если предыдущий вариант ничего не принес, то поиск осуществляется здесь название_темы/modules/имя_модуля/views/templates/front/сам_шаблон (PS_THEME_DIR_.'modules/'.$this->module->name.'/views/templates/front/'.$template)
3. если предыдущий вариант также ничего не принес, то последняя попытка происходит здесь директория_модулей/имя_модуля/views/templates/front/сам_шаблон (_PS_MODULE_DIR_.$this->module->name.'/views/templates/front/'.$template).

Создание кастомного фронт контроллера стало очень и очень простым, для этого (рассмотрим на примере модуля mailalerts в упрощенном варианте), сначала размещаем контроллер в директории модуля, а именно по пути имя_модуля/controllers/front/имя_контроллера (/modules/mailalerts/controllers/front/account.php)

Здесь, в методе initContent() устанавливается кастомный темплейт для этого модуля. С новым контроллером работаем в обычном режиме (как с обычным потомком FrontController), если вы не задаете кастомный теплейт, то будет обычная страница без главного контента (заголовок, хуки, колонки подвал и т.д. на странице будут).

После создания контроллер будет доступен по пути /index.php?fc=module&module=mymodule&controller=mycontroller (или в нашем примере по пути /index.php?fc=module&module=mailalerts&controller=account) – не самый лучший вариант для ЧПУ, на мой взгляд, поэтому рекомендую настроить адекватный url через админку (пожалуйста, не стоит использовать htaccess в данном случае, т.к. реализованные cms возможности достаточно широки) Preferences -> SEO & URLs блок SEO & URLs добавляем новый:
в поле Page ищем наш новый фронт контроллер, после чего заполняем все поля и сохраняем (подробнее о ЧПУ можно почитать здесь), если вас не устраивает такой вариант, то в блоке (Preferences -> SEO & URLs -> Schema of URLs) заданы вами или по-умолчанию правила маршрутизации для модулей, это значит, что ваш контроллера так же будет доступен по указанному шаблону.

Вот собственно и все, если вам необходимо ссылка на новую страницу воспользуйтесь методом Link::getPageLink() ($link->getModuleLink('mailalerts', 'account', array(), true)) линк будет сформирован с установленными ранее (читай выше) правилами маршрутизации.