在PrestaShop中在何处注册全局smarty修改器?
我正在创建一个基于PrestaShop(v1.6)的商店,我想注册我的自定义修改器插件,使其可以从任何模板(包括前台和后台模板)访问 问题是在哪里放置注册码 现在我使用Tools类override添加函数来处理修饰符(对于特定于商店的功能,这是可以接受的做法,afaik),并使用smarty.config.inc.php来注册插件(因为所有的PrestaShop插件都在这里注册),但该文件包含关于“不直接修改文件”,据我所知,在升级PrestaShop时会被覆盖 所以,问题是在哪里注册我的插件,以确保我的代码不会被覆盖在PrestaShop中在何处注册全局smarty修改器?,prestashop,prestashop-1.6,smarty-plugins,Prestashop,Prestashop 1.6,Smarty Plugins,我正在创建一个基于PrestaShop(v1.6)的商店,我想注册我的自定义修改器插件,使其可以从任何模板(包括前台和后台模板)访问 问题是在哪里放置注册码 现在我使用Tools类override添加函数来处理修饰符(对于特定于商店的功能,这是可以接受的做法,afaik),并使用smarty.config.inc.php来注册插件(因为所有的PrestaShop插件都在这里注册),但该文件包含关于“不直接修改文件”,据我所知,在升级PrestaShop时会被覆盖 所以,问题是在哪里注册我的插件,
提前感谢。您可以使用模块完成此操作 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
。
在其中,我们将编写一个静态方法,在调用smarty插件时执行
class TestClass {
public static function toUpperMethod($param)
{
return strtoupper($param);
}
}
安装该模块,您可以在任何模板中使用插件,例如在头版
{$page_name|testToUpper}
将回显页面名称并将其转换为大写
class TestClass {
public static function toUpperMethod($param)
{
return strtoupper($param);
}
}
例如,如果您试图在阵列上使用修改器,您可以进行修改或保护,但这是注册smarty插件的基础
无需重写,无需核心攻击。非常感谢,这个钩子非常适合在控制器加载后进行初始化。非常感谢!