在 PrestaShop 中创建可通过所有模板访问的变量
Create variable accessible through all templates in PrestaShop
我明白如果我想在 PrestaShop 中制作我自己的模板变量,我会使用这样的代码:
$this->context->smarty->assign( 'varName', 'varValue' );
我还了解到添加它的正确方法是将其放入控制器中...并且一切正常...
我不知道如何在一个地方执行此操作但仍然能够访问所有模板(我的主题的 .tpl 文件)中的模板变量?
PS:将它添加到所有控制器似乎是多余的...我试图 google 解决它,但我想我输入了错误的关键字来搜索...
所以我找到了解决办法。
您要做的是将您的变量定义放在某个 "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();
}
}
加载覆盖 => 转到 cache
目录(从商店根目录)并编辑名为 class_index.php
:
的文件
- 查找键为 "FrontController" 的数组(搜索
'FrontController'
或 "FrontController"
)
- 在这个数组中将
'path' => 'WHATEVER',
中的"WHATEVER"
更改为override/classes/controller/FrontController.php
所以你会得到:
'path' => 'override/classes/controller/FrontController.php',
在模板文件中自由使用变量 {$yourVariable}
参考: http://doc.prestashop.com/display/PS16/Overriding+default+behaviors
你也可以使用模块,prestashop 提供了钩子,我们可以在我们的模块中使用 header 钩子,并将变量从 header 钩子函数传递给 smarty。 header 挂钩在所有页面上都可用
public function hookHeader($params)
{
$this->smarty->assign(array('var1' => 'value 1', 'var2' => 'value 2', 'var3' => 'value 3',));
}
我明白如果我想在 PrestaShop 中制作我自己的模板变量,我会使用这样的代码:
$this->context->smarty->assign( 'varName', 'varValue' );
我还了解到添加它的正确方法是将其放入控制器中...并且一切正常...
我不知道如何在一个地方执行此操作但仍然能够访问所有模板(我的主题的 .tpl 文件)中的模板变量?
PS:将它添加到所有控制器似乎是多余的...我试图 google 解决它,但我想我输入了错误的关键字来搜索...
所以我找到了解决办法。
您要做的是将您的变量定义放在某个 "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();
}
}
加载覆盖 => 转到
的文件cache
目录(从商店根目录)并编辑名为class_index.php
:- 查找键为 "FrontController" 的数组(搜索
'FrontController'
或"FrontController"
) - 在这个数组中将
'path' => 'WHATEVER',
中的"WHATEVER"
更改为override/classes/controller/FrontController.php
所以你会得到:'path' => 'override/classes/controller/FrontController.php',
- 查找键为 "FrontController" 的数组(搜索
在模板文件中自由使用变量
{$yourVariable}
参考: http://doc.prestashop.com/display/PS16/Overriding+default+behaviors
你也可以使用模块,prestashop 提供了钩子,我们可以在我们的模块中使用 header 钩子,并将变量从 header 钩子函数传递给 smarty。 header 挂钩在所有页面上都可用
public function hookHeader($params)
{
$this->smarty->assign(array('var1' => 'value 1', 'var2' => 'value 2', 'var3' => 'value 3',));
}