Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.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
Class Prestashop-标头中无法访问变量。tpl-$category类不可用_Class_Variables_Controller_Prestashop - Fatal编程技术网

Class Prestashop-标头中无法访问变量。tpl-$category类不可用

Class Prestashop-标头中无法访问变量。tpl-$category类不可用,class,variables,controller,prestashop,Class,Variables,Controller,Prestashop,我目前正在学习模板变量,并试图了解它们是如何工作的以及它们的含义。 我在{$category->id_cms_category}上做了一个测试,我把它放在cms.tpl中,得到一个结果9,但当我把它放在header.tpl或blockcms.tpl(左列)中时,没有结果,它是空白的 有人能解释一下这是如何工作的,以及我如何在不同的.tpl文件中得到相同的结果吗? 我认为问题实际上是如何将$category类分配给例如header.tpl。这与控制器有关吗? 为什么我不能在任何地方使用某些变量?这

我目前正在学习模板变量,并试图了解它们是如何工作的以及它们的含义。 我在{$category->id_cms_category}上做了一个测试,我把它放在cms.tpl中,得到一个结果9,但当我把它放在header.tpl或blockcms.tpl(左列)中时,没有结果,它是空白的

有人能解释一下这是如何工作的,以及我如何在不同的.tpl文件中得到相同的结果吗? 我认为问题实际上是如何将$category类分配给例如header.tpl。这与控制器有关吗? 为什么我不能在任何地方使用某些变量?这是怎么回事?如果有人能解释一下,我会很高兴的。
我也在学习smarty

不幸的是,smarty遇到了一个常见问题,尤其是它在Prestashop中的实现方式

Smarty变量在Prestashop中的作用域非常有限,它们的作用域由分配给它们的代码的运行点决定。在
{$category->id\u cms\u category}
的情况下,它在呈现主要内容(中间的重要内容)的位置被分配给CMSController,因此将在cms.tpl中可用,正如您所演示的

它在左列或标题中不可用的原因是由于每个部分的呈现顺序。这将是:

a) 标题(页面顶部,而不是html标题块),然后 b) 左栏,然后 c) “主要”内容,然后 d) 右栏 e) 页脚

您应该发现,如果您要在页面的右栏或页脚中引用它,那么它将神奇地对您可用(当然,仅在CMS页面上,因为我们依赖正在运行的CMSController并为其赋值)

如果您需要在页面标题中引用诸如cms类别之类的内容(可能要在水平导航上设置一个突出显示),那么您需要获取该值并将其分配给smarty自己。您可以通过以下两种方式之一执行此操作:

1) 编写一个连接到标题中的模块,并在那里分配变量 2) 重写FrontController类并在该类中分配smarty变量(例如,在init函数中)

您可以尝试创建一个文件
/override/classes/FrontController.php
,其中包含:

<?php
class FrontController extends FrontControllerCore
{
  function init() {
    parent::init();
    $id_cms_category = (int)Tools::getValue('id_cms_category');
    $id_cms_page = (int)Tools::getValue('id_cms');
    self::$smarty->assign(array(
                                'my_cms_category_id' => $id_cms_category,
                                'my_cms_page_id' => $id_cms_page
                                )
                          );
  }
}

哇,非常感谢你这么详细的解释!我一直在努力寻找解决方案,搜索了这么长时间,你花了时间向我解释。我真的很感激。非常感谢你!