Prestashop PHP包含在.tpl中不起作用

时间:2011-09-01 16:47:49

标签: php prestashop

我正在使用Prestashop为客户创建店面。 Prestashop使用Smarty .TPL文件。我阅读了巧妙的文档并浏览了网页,但所有的建议都没有用。

我首先使用常规的.php页面建立了一个网站,并且我在每个页面都包含了header.php。

然后我为prestashop创建了一个目录并设置好了。我编辑了header.tpl文件,并能够在header.php代码中进行硬编码。这个问题是;当我想编辑标题(导航栏,图像,社交媒体)时,我将不得不在两个不同的地方编辑它。所以我试图“包含”我的header.php文件。

但是,当我尝试使用smarty的{include_PHP“file.php”}和/或{PHP} include ... {PHP}时,Prestashop错误输出并给我一个空白的白页 - 没有给出错误 - (在chrome它给了我一个“服务器错误”),直到我拿出包含。

我尝试用一​​个聪明的include和另一段带有头钩的代码替换整个header.tpl代码,但这些代码都没有用。有什么建议?我只想要一个标题,我只需编辑一次即可进行更改。

使用Prestashop v 1.4.4.0

编辑:我将allow_php从false更改为true。现在它正在尝试添加该文件,尽管它说它无法找到该文件。我将它放在header.tpl旁边,然后使用:

{php}
            include('navBar.php'); 
       {/php} 

2 个答案:

答案 0 :(得分:4)

ANSWERED!

使用Smarty .TPL文件时,如果包含某些内容,则不会包含您正在处理的文件的路径。您包括索引所在的位置。

示例:

我正在使用header.tpl,它位于: siteroot / smartyinstall /主题/ THEMENAME /header.tpl

当include正在寻找文件时,它实际上是在smarty根文件夹中查找它,因为header.tpl被拉入 smartyinstall 文件夹中的index.html页面。

所以,你必须从那里开始。就我而言,我试图包含的标题是: siteroot /包括/ navBar.php

所以,我必须写include('../ includes / navBar.php');,只上一个目录,而不是四个。

我希望这可以帮助每个有这样问题的人!

答案 1 :(得分:0)

将php包含在smarty .tpl文件中被认为是非常糟糕的做法,因此我强烈建议您不要以这种方式添加代码。禁用{php}标记的主要原因之一是帮助防止代码注入攻击。电子商务网站本质上是利用的天然目标。

更好的方法是覆盖FrontController类以将自定义代码分配给smarty变量 - 然后可以将其插入header.tpl而无需使用php include()。< / p>

由于Prestashop 1.4.x中提供了类和控制器覆盖,因此您没有理由需要采用黑客攻击和/或修改核心发行版。