jav*_*web 2 templates controller smarty prestashop prestashop-1.6
我明白如果我想在PrestaShop中创建自己的模板变量,我会使用这样的代码:
$this->context->smarty->assign( 'varName', 'varValue' );
Run Code Online (Sandbox Code Playgroud)
我也明白添加它的正确方法是将它放入控制器......这一切都有效......
我无法弄清楚的是如何在一个地方做到这一点,但仍然能够访问所有模板中的模板变量(我的主题的.tpl文件)?
PS:将它添加到所有控制器似乎是多余的...我试图谷歌它,但我想我把坏关键字搜索...
所以我找到了解决方案.
你想要做的是将你的变量定义放在一些"通用"控制器中 - 对于前端它是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();
}
}
Run Code Online (Sandbox Code Playgroud)
加载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