在PrestaShop中在何处注册全局smarty修改器?

在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时会被覆盖 所以,问题是在哪里注册我的插件,

我正在创建一个基于PrestaShop(v1.6)的商店,我想注册我的自定义修改器插件,使其可以从任何模板(包括前台和后台模板)访问

问题是在哪里放置注册码

现在我使用Toolsoverride添加函数来处理修饰符(对于特定于商店的功能,这是可以接受的做法,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插件的基础


无需重写,无需核心攻击。

非常感谢,这个钩子非常适合在控制器加载后进行初始化。非常感谢!