我明白如果我想在PrestaShop中创建自己的模板变量,我会使用这样的代码:
id
我也明白添加它的正确方法是将它放入控制器......这一切都有效......
我无法弄清楚的是如何在一个地方执行此操作,但仍然可以访问所有模板中的模板变量(我的主题的.tpl文件)?
PS:将它添加到所有控制器似乎是多余的......我试图将其谷歌出去,但我想我会把糟糕的关键词用于搜索......答案 0 :(得分:5)
所以我找到了解决方案。
您要做的是将变量定义放在某些" general"控制器 - 对于前端,它是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"
)'path' => 'WHATEVER',
override/classes/controller/FrontController.php
,您将获得:'path' => 'override/classes/controller/FrontController.php',
在模板文件中自由使用您的变量{$yourVariable}
参考: http://doc.prestashop.com/display/PS16/Overriding+default+behaviors
答案 1 :(得分:4)
你也可以使用模块,prestashop提供钩子,我们可以使用我们模块中的头钩子,并从头部钩子函数传递变量到smarty。标题钩子可在所有页面上使用
public function hookHeader($params)
{
$this->smarty->assign(array('var1' => 'value 1', 'var2' => 'value 2', 'var3' => 'value 3',));
}