Переопределение template prestashop начиная с версии 1.5

Версия 1,5 в значительной степени изменила всю организацию работы панели администратора: наконец-то AdminTabы были заменены нормальными контроллерами, добавлены удобные средства для их переопределения, а так же html вынесен во вьюхи.

О templates поподробнее.

Организация директорий для admin templates следующая:
- admin/themes/default/template/helpers/type_of_the_helper/ – здесь templates хелперов (типы: calendar, dataviz, form, kpi, list, modules_list, options, tree, uploader, view; наиболее популярные из них конечно же form и list) используются всегда по умолчанию, т.е когда нет перегруженных;
- admin/themes/default/template/controllers/name_of_the_controller/: templates перегруженные в контроллере;
- override/controllers/admin/templates/name_of_the_controllerr директория для перегрузки родных(т.е. вышеописанных) templates;

Если заглянуть в контроллеры админки, то становится ясно как и когда используются эти templates.

О templates из хелперов:

Наиболее часто перегружаемые это list и form.

Список (list) используется дли вывода списка значений сущности (сама сущность, как мы помним, указывается в $this->className). С помощью свойств и методов котроллера (например, таких как: fields_list, bulk_actions, addRowAction() и т.д.) вы можете управлять содержимым. В AdminController вызов хелпера для отрисовки списка происходит в методе renderList.

Form используется для отрисовки формы редактирования значения сущности – здесь ключевую роль играют свойства контроллера fields_form, tpl_form_vars и хелпера fields_value, submit_action и т.д.

О стандартных перегруженных темплейтах:

Достаточно большое количество темплейтов хелперов перегружено для отдельных контроллеров – это связано с необходимыми различиями в отображении сущностей.
Есть котроллеры, где совершенно по другому должны отображаться списки, заголовки, формы редактирования, как, например, products, orders – для них используются кастомно отрисованные templates. Соответственно перегружаются методы в которых происходят вызовы хелперов для прорисовки, поэтому в директории /amazing/themes/default/template/controllers/products/customization.tpl можно увидеть огромное число темплейтов.

Перегрузка родных темплейтов:

Для перегрузки темплейтов из 2х ранее описанных пунктов используется директория override/controllers/admin/templates/name_of_the_controller/
Создается директория с именем котроллера без слов Controller и Core (на самом деле директорию можно называть и не по имени контроллера, а как-то по-другому, задав имя в свойстве tpl_folder контроллера, но лучше этого не делать).
Например, пути для перегрузки пары темплейтов AdminProductsController – admin/themes/default/template/controllers/name_of_the_controller/helpers/form/form.tpl – для хелпера form и /override/controllers/admin/templates/products/informations.tpl – для перегрузки информации о продукте.

Template может быть заменен полностью, а может частями. В 1м случае просто заменяется все содержимое родного файла; во 2м – перегружается какая-то часть: многие (но не все) template разделены на блоки с именами – именно эти блоки можно перегружать по отдельности или добавлять новые, например переопределение заголовка списка cms страниц:

Или пример переопределения части form template в модуле: имеется кастомный контроллер для админки (потомок ModuleAdminController), в нем переопределяется часть формы редактирования стандартного шаблона form. Размещается файл с переопределением здесь _PS_MODULE_DIR_.module_name.'/views/templates/admin/'.$this->override_folder.$this->base_folder.$tpl_name, поэтому в моем случае
/modules/module_name/views/templates/admin/module_name/helpers/form/form.tpl (переопределяется блок отрисовки label и field):

Выбор темплейта (родной или перегруженный) осуществляется при его прорисовки здесь HelperCore::createTemplate(), алгоритм выбора более чем простой.

Это всего лишь часть верхушки айсберга, применение остальных видов можно увидеть в контроллерах, но трудностей при перегрузки обычно не возникает.