prestashop - 在 PrestaShop 中在哪里注册全局 smarty 修饰符?

标签 prestashop prestashop-1.6 smarty-plugins

我正在创建一个基于 PrestaShop (v 1.6) 的商店,并且我想注册我的自定义修改器插件,以便可以从任何模板(包括前台和后台模板)访问。

问题是在哪里 放置注册码?

现在我使用 工具 类(class) 覆盖 添加处理修饰符的功能(在商店特定功能的情况下这是可接受的做法,afaik)和 smarty.config.inc.php 注册插件(因为所有 PrestaShop 插件都在这里注册),但是这个文件包含一个关于“不要直接修改文件”的警告,据我所知,当我升级 PrestaShop 时会被覆盖。

所以,问题是在哪里注册我的插件以确保我的代码不会被覆盖?

提前致谢。

最佳答案

你可以用一个模块来做到这一点。

1.创建模块

在 modules 文件夹中创建一个文件夹 testmodule并在里面创建一个 php 文件 testmodule.php .

我们将使用 Hook actionDispatcher它在每个页面 Controller 实例化后执行,以将修改器插件注册到 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} 

将回显并将页面名称转换为大写。

例如,如果您尝试在数组上使用修饰符,您可以进行修改或保护,但这是注册 smarty 插件的基础知识。

无需覆盖,也无需核心黑客攻击。

关于prestashop - 在 PrestaShop 中在哪里注册全局 smarty 修饰符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39982299/

相关文章:

php - Prestashop 1.6 结账时金额篡改

php - 在 prestashop 中获取图片 url

image - Prestashop img 文件夹太大(几乎 40GB)

php - PrestaShop 1.6 后台分页无法正常工作

javascript - 将新变量添加到 Prestashop Cart 对象

php - Prestashop 清除缓存哪些文件夹受影响

php - 如何在 Prestashop 中为 CMS 页面添加特色图片