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

标签 templates controller smarty prestashop prestashop-1.6

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

$this->context->smarty->assign( 'varName', 'varValue' );

我还明白添加它的正确方法是将其放入 Controller 中......并且一切正常......

我不知道如何在一个地方执行此操作,但仍然能够访问所有模板(我的主题的 .tpl 文件)中的模板变量?

PS:将它添加到所有 Controller 似乎是多余的......我试图用谷歌搜索它,但我想我输入了错误的关键字来搜索......

最佳答案

所以我找到了解决方案。

您想要做的是将变量定义放入某个“通用” Controller 中 - 对于前端来说,它是 FrontController 。编辑核心文件的更好方法是进行覆盖,因此我将向您展示您需要做的所有事情 - 考虑 PrestaShop 1.6 :

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

  2. 创建此文件的内容 - 覆盖的便捷方法是 initHeader() ,因为该变量将在 header.tpl 中可用以及使用它的所有模板
    (在 header.tplindex.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

    关于templates - 创建可通过 PrestaShop 中的所有模板访问的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32154593/

    相关文章:

    ruby-on-rails - 如何在 Rails 中制作 UI 组件?

    c++ - 如何从基类容器中提取派生类?

    c++ - 如何将模板函数重载转换为偏特化的模板类静态方法?

    javascript - 无法读取 null 的属性(读取 'name' )

    go - 如何强制对自定义 Controller 中的 SharedIndexInformer 进行完全重新同步

    jquery - ASP.NET MVC - 路由仍然让我感到困惑

    asp.net - 像 ASP.NET 中的 Smarty 之类的东西?

    c++ - C++ 中成员数量可变的模板类

    php - 使用 Smarty 评论/跳过标记

    php - Smarty 在与 PHP 一起使用或更好地使用纯 PHP 时有哪些好处?