gpt4 book ai didi

php - 从模块覆盖核心模板文件

转载 作者:搜寻专家 更新时间:2023-10-31 21:30:58 25 4
gpt4 key购买 nike

我是 Prestashop 的学习插件开发人员。我已经尝试解决这个问题很长时间了,你如何正确地覆盖模块中的模板文件?目前,我通过在安装时从我的模块复制覆盖文件夹中的模板文件来覆盖整个文件:

来自:

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

收件人:

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

覆盖整个文件只是为了添加一个输入字段似乎很粗糙。

这工作得很好,但我很担心,因为如果用户安装了一些其他想要使用同一文件的模块并且它损坏了或者 Prestashop 的新版本更改了文件并且它不再支持新版本。在任何方面都感觉像是解决问题的肮脏方法。

有没有办法只覆盖文件的一部分,也许直接从模块文件夹覆盖?有没有更好的方法来做到这一点?你是怎么做到的?

最佳答案

要覆盖 PrestaShop 中的模板,您需要覆盖模块 Controller 中的 hookDisplayOverrideTemplate 方法。

要注册你的钩子(Hook),将它添加到你的安装函数中:

$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 文件夹中。

当页面加载时,前端 Controller classes/controller/FrontController.php 调用 hookDisplayOverrideTemplate 函数,如果返回模板,它将被加载,否则它会加载默认模板。

我已经对此进行了测试并且知道它适用于 PrestaShop v1.5 和 v1.6

关于php - 从模块覆盖核心模板文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30120311/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com