我知道,如果要在PrestaShop中创建自己的模板变量,可以使用如下代码:
$this->context->smarty->assign( 'varName', 'varValue' );
我也了解添加此内容的正确方法是将其放入控制器中……并且一切正常……
我不知道如何在一个地方执行此操作,但仍然能够访问所有模板(我主题的.tpl文件)中的模板变量?
PS:将其添加到所有控制器似乎是多余的...我试图用Google搜索它,但是我想我输入了错误的关键字来搜索...
最佳答案
所以我找到了解决方案。
您要做的是将变量定义放在某个“通用”控制器中-对于前端,它是FrontController
。然后编辑核心文件的一种更好方法是进行覆盖,这样我将向您展示您需要做的所有事情-考虑到PrestaShop 1.6:
创建一个名为FrontController.php
的文件并将其放入override/classes/controller
创建此文件的内容-方便的方法是initHeader()
,因为该变量将在header.tpl
和使用它的所有模板中可用(在header.tpl
和index.tpl
中测试)。override/classes/controller/FrontController.php
的内容:
class FrontController extends FrontControllerCore {
public function initHeader(){
//create your variable
self::$smarty->assign('yourVariable', 'valueOfYourVariable');
//call original method, to maintain default behaviour:
return parent::initHeader();
}
}
加载override =>进入
cache
目录(从商店根目录开始)并编辑名为class_index.php
的文件:查找键为“ FrontController”的数组(搜索
'FrontController'
或"FrontController"
)在此数组中,将
'path' => 'WHATEVER',
中的“无论如何”更改为override/classes/controller/FrontController.php
,这样您将获得:'path' => 'override/classes/controller/FrontController.php',
在模板文件中以
{$yourVariable}
自由使用变量参考:http://doc.prestashop.com/display/PS16/Overriding+default+behaviors