Pet*_*tra 0 variables controller class prestashop
我目前正在学习模板变量,并试图了解它们的工作原理和含义.我已经在{$ category-> id_cms_category}上做了一个测试,我把它放在cms.tpl中,我得到了一个结果9,但是当我把它放在header.tpl或blockcms.tpl(左栏)中时,没有结果,这是空白的.
有人可以解释一下这是如何工作的,以及如何在不同的.tpl文件中获得相同的结果?我认为问题实际上是如何将$ category类分配给例如header.tpl.它与控制器有关吗?为什么我不能在任何地方使用某些变量?这是如何运作的?如果有人解释这一点,我会很高兴.我还在学习聪明.
小智 7
不幸的是,你遇到了一个常见的问题,特别是如何在Prestashop中实现它.
Smarty变量在Prestashop中的范围非常有限,它们的范围取决于它们分配的代码部分在哪一点运行.如果{$category->id_cms_category}
它是在CMSController中在主要内容(中间的重要内容)被渲染的位置分配的,那么将在cms.tpl中提供,如您所示.
它在左列或标题中不可用的原因是由于每个部分的呈现顺序.这将会:
a)标题(页面顶部而不是具体的html标题块),然后b)左列,然后c)"主要"内容,然后d)右列,然后e)页脚
您应该发现,如果您要在页面的右栏或页脚中引用它,那么神奇地它将可供您使用(当然,仅在CMS页面上,因为我们依赖于正在运行的CMSController并将其指定为值).
如果您需要在页面标题中引用cms类别之类的内容(可能在水平导航上设置突出显示),那么您将需要获取值并自己将其分配给smarty.您可以通过以下两种方式之一完成此操作:
1)编写一个挂钩到头部的模块并在那里分配你的变量2)覆盖FrontController类并在那里分配smarty变量(例如在init函数中)
您可以尝试的2)示例是创建一个/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
)
);
}
}
Run Code Online (Sandbox Code Playgroud)
上述应允许您显示{my_cms_category_id}
和{my_cms_page_id}
你的主题的任何地方(因为我们设置Smarty的变量之前所有其他被渲染).对于非cms页面,它们都应该是0,my_cms_category_id
应该在cms类别页面上设置为非零,并且{my_cms_page_id}
在特定的cms页面上应该为非零.
希望这可以使它更清晰一些!