Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Templates 创建可通过PrestaShop中的所有模板访问的变量_Templates_Controller_Smarty_Prestashop_Prestashop 1.6 - Fatal编程技术网

Templates 创建可通过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:将其添加到所有控制器似乎是多余的。。。我试着用谷歌搜索出来,但我想我是在搜索坏关键字 所以我找到了解决办法 您要做的是将变量

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

$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),但请理解,我不想在创建基本主题视图时创建模块…:)