Переопределение файлов базовых шаблонов из модуля

Я разработчик аддонов для обучения в Prestashop. Я пытался решить эту проблему в течение длительного времени, как правильно переопределить файл шаблона из модуля? На данный момент я перезаписываю весь файл, копируя файл шаблона в папку переопределения из моего модуля при установке:

От:

/modules/<module>/views/templates/admin/products/informations.tpl

Для того, чтобы:

/override/controllers/admin/templates/products/informations.tpl

Переопределение всего файла просто для добавления поля ввода кажется довольно грубым.

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

Есть ли способ переопределить только часть файла и, возможно, прямо из папки модуля? Есть ли лучший способ сделать это? Как ты это делаешь?

3

Решение

Чтобы переопределить шаблоны в PrestaShop, вам нужно переопределить hookDisplayOverrideTemplate метод из вашего контроллера модулей.

Чтобы зарегистрировать свой хук, добавьте это в вашу функцию установки:

$this->registerHook('DisplayOverrideTemplate');

Теперь добавьте свою собственную версию функции на сервер ваш файл .tpl.

public function hookDisplayOverrideTemplate($params)
{
$controllerName = get_class($params['controller']);
$tpl = dirname(__FILE__) . '/views/templates/override/example.tpl';
if ($controllerName == 'ExampleController' && file_exists($tpl))
return $tpl;
return false;
}

В моем примере вам нужно поместить свой шаблон, который вы хотите переопределить внутри ваших модулей /views/template/override папка.

Когда страница загружается фронт-контроллер, classes/controller/FrontController.phpвызывает hookDisplayOverrideTemplate Функция и если шаблон возвращается, он будет загружен, в противном случае он загружает шаблон по умолчанию.

Я проверил это и знаю, что это работает для PrestaShop v1.5 и v1.6

1

Другие решения

Если вашему модулю необходимо изменить какой-либо код в файле .tpl, лучше сделать это в оригинальном .tpl и поместить туда оператор IF-ELSE, который добавит ваше поле ввода, только если модуль включен. Вы не можете избежать уничтожения этих файлов, когда кто-то обновит скрипт.

Вы можете подумать о некотором решении JS, которое добавит входные данные на стороне клиента.

0

По вопросам рекламы [email protected]