Templates 创建可通过PrestaShop中的所有模板访问的变量
我明白,如果我想在PrestaShop中创建自己的模板变量,我会使用如下代码:Templates 创建可通过PrestaShop中的所有模板访问的变量,templates,controller,smarty,prestashop,prestashop-1.6,Templates,Controller,Smarty,Prestashop,Prestashop 1.6,我明白,如果我想在PrestaShop中创建自己的模板变量,我会使用如下代码: $this->context->smarty->assign( 'varName', 'varValue' ); 我也明白,正确的方法是把它放入控制器中。。。这一切都很有效 我不知道如何在一个地方做到这一点,但仍然能够访问所有模板中的模板变量(我的主题的.tpl文件) PS:将其添加到所有控制器似乎是多余的。。。我试着用谷歌搜索出来,但我想我是在搜索坏关键字 所以我找到了解决办法 您要做的是将变量
$this->context->smarty->assign( 'varName', 'varValue' );
我也明白,正确的方法是把它放入控制器中。。。这一切都很有效
我不知道如何在一个地方做到这一点,但仍然能够访问所有模板中的模板变量(我的主题的.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();
}
}
缓存
目录(从商店根目录)并编辑名为class_index.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();
}
}
- 查找具有键“FrontController”的数组(搜索
或'FrontController'
)“FrontController”
- 在这个数组中,将
'path'=>'WHATEVER'中的“WHATEVER”更改为
,这样您将得到:覆盖/classes/controller/FrontController.php
'path'=>'override/classes/controller/FrontController.php',
{$yourVariable}
参考:您也可以使用模块,prestashop提供了挂钩,我们可以在模块内使用标头挂钩,并通过标头挂钩函数将变量传递给smarty。页眉挂钩在所有页面上都可用
public function hookHeader($params)
{
$this->smarty->assign(array('var1' => 'value 1', 'var2' => 'value 2', 'var3' => 'value 3',));
}
这是一个很好的观点(so+1),但请理解,我不想在创建基本主题视图时创建模块…:)