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

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:将它添加到所有控制器似乎是多余的...我试图谷歌它,但我想我把坏关键字搜索...

jav*_*web 5

所以我找到了解决方案.

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

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

  2. 创建此文件的内容 - 覆盖的方便方法是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)
  1. 加载override =>转到cache目录(从商店根目录)并编辑名为的文件class_index.php:

    • 使用键"FrontController"查找数组(搜索'FrontController'"FrontController")
    • 在这阵变化中"无所谓" 'path' => 'WHATEVER',
      ,以override/classes/controller/FrontController.php这样你会得到:
      'path' => 'override/classes/controller/FrontController.php',
  2. 在模板文件中自由使用变量 {$yourVariable}

参考: http ://doc.prestashop.com/display/PS16/Overriding+default+behaviors