Class Prestashop-标头中无法访问变量。tpl-$category类不可用
我目前正在学习模板变量,并试图了解它们是如何工作的以及它们的含义。 我在{$category->id_cms_category}上做了一个测试,我把它放在cms.tpl中,得到一个结果9,但当我把它放在header.tpl或blockcms.tpl(左列)中时,没有结果,它是空白的 有人能解释一下这是如何工作的,以及我如何在不同的.tpl文件中得到相同的结果吗? 我认为问题实际上是如何将$category类分配给例如header.tpl。这与控制器有关吗? 为什么我不能在任何地方使用某些变量?这是怎么回事?如果有人能解释一下,我会很高兴的。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。这与控制器有关吗? 为什么我不能在任何地方使用某些变量?这
我也在学习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
)
);
}
}
哇,非常感谢你这么详细的解释!我一直在努力寻找解决方案,搜索了这么长时间,你花了时间向我解释。我真的很感激。非常感谢你!