创建可通过PrestaShop中的所有模板访问的变量

时间:2015-08-22 09:39:27

标签: templates controller smarty prestashop prestashop-1.6

我明白如果我想在PrestaShop中创建自己的模板变量,我会使用这样的代码:

id

我也明白添加它的正确方法是将它放入控制器......这一切都有效......

我无法弄清楚的是如何在一个地方执行此操作,但仍然可以访问所有模板中的模板变量(我的主题的.tpl文件)?

PS:将它添加到所有控制器似乎是多余的......我试图将其谷歌出去,但我想我会把糟糕的关键词用于搜索......

2 个答案:

答案 0 :(得分:5)

所以我找到了解决方案。

您要做的是将变量定义放在某些" general"控制器 - 对于前端,它是FrontController。编辑核心文件的更好方法是进行覆盖,以便我向您展示您需要做的所有事情 - 考虑到PrestaShop 1.6:

  1. 创建名为FrontController.php的文件并将其放入override/classes/controller

  2. 创建此文件的内容 - 要覆盖的方便方法是initHeader(),因为该变量将在header.tpl中可用,并且所有使用它的模板都会在header.tplindex.tpl)。

  3. 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();
        }
    }
    
    1. 加载override =>转到cache目录(从商店根目录)并编辑名为class_index.php的文件:

      • 使用键" FrontController"查找数组(搜索'FrontController'"FrontController"
      • 在此数组中更改" WHATEVER"在'path' => 'WHATEVER',
        override/classes/controller/FrontController.php,您将获得:
        'path' => 'override/classes/controller/FrontController.php',
    2. 在模板文件中自由使用您的变量{$yourVariable}

    3. 参考: 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',));
}