Вы можете сделать это с помощью модуля.
1. Создайте модуль папку
Внутри модулей создать папку testmodule
и внутри создать PHP файл testmodule.php
.
Мы будем использовать крючок actionDispatcher
, который выполняет после каждого экземпляра контроллера страницы, чтобы зарегистрировать плагин модификатора в smarty.
require_once _PS_MODULE_DIR_ . 'testmodule' . DIRECTORY_SEPARATOR . 'TestClass.php';
class TestModule extends Module {
public function __construct()
{
$this->name = 'testmodule';
$this->tab = 'front_office_features';
$this->version = '1.0';
parent::__construct();
$this->displayName = $this->l('Test Module');
$this->description = $this->l('Testing smarty plugins.');
}
public function install()
{
return parent::install() && $this->registerHook('actionDispatcher');
}
public function hookActionDispatcher()
{
/*
We register the plugin everytime a controller is instantiated
'modifier' - modifier type of plugin
'testToUpper' - plugin tag name to be used in templates,
array('TestClass', 'toUpperMethod') - execute toUpperMethod() from class TestClass when using modifier tag name
*/
$this->context->smarty->registerPlugin('modifier', 'testToUpper', array('TestClass', 'toUpperMethod'));
}
}
2. Создать класс, который держит метод Изменявшего
В той же папке модуля создать файл TestClass.php
. В нем мы напишем статический метод для выполнения, когда вызывается смарт-плагин. Для этого простого теста мы изменим любую строку, которую хотим записать в верхний регистр.
class TestClass {
public static function toUpperMethod($param)
{
return strtoupper($param);
}
}
Установите модуль, и вы можете использовать плагин в любом шаблоне, например, на первых страницах
{$page_name|testToUpper}
отзовется и преобразование имени страницы в верхний регистр.
Вы можете внести изменения или меры предосторожности в случае, если вы попытаетесь использовать модификатор на массивах, например, но это основа регистрации плагинов smarty.
Не требуется переопределение и отсутствие необходимости в хакерстве.
Большое спасибо, этот крюк действительно хорош для любой инициализации сразу после загрузки контроллера. – AlexandrX
Спасибо, столько! – iamrobert