[英]Prestashop PHP Include in a .tpl does not work
我正在使用Prestashop为客户创建店面。 Prestashop使用Smarty .TPL文件。 我阅读了巧妙的文档并浏览了网页,但所有建议都无效。
我首先使用常规.php页面创建了一个站点,并且我在每个页面上都包含了header.php。
然后我为prestashop创建了一个目录并设置好了。 我编辑了header.tpl文件,并能够在header.php代码中进行硬编码。 这个问题是; 当我想编辑标题(导航栏,图像,社交媒体)时,我将不得不在两个不同的地方编辑它。 所以我试图“包含”我的header.php文件。
虽然,当我尝试使用smarty的{include_PHP“file.php”}和/或{PHP}包含... {PHP}时,Prestashop错误并给我一个空白的白页 - 没有给出错误 - (在chrome中给出我是一个“服务器错误”),直到我拿出包含。
我尝试用一个聪明的包和另一段带有头钩的代码替换整个header.tpl代码,但这些代码都没有用。 有什么建议? 我只想要一个标题,我只需要编辑一次即可进行更改。
使用Prestashop v 1.4.4.0
编辑:我从false将allow_php更改为true。 现在它正在尝试添加该文件,尽管它说它无法找到该文件。 我将它放在header.tpl旁边并且刚刚使用:
{php}
include('navBar.php');
{/php}
ANSWERED!
使用Smarty .TPL文件时,如果包含某些内容,则不包括您正在处理的文件的路径。 您包括索引所在的位置。
例:
我正在使用header.tpl,它位于:siteroot / smartyinstall / themes / themename /header.tpl
当include正在寻找文件时,它实际上是在smarty根文件夹中查找它,因为header.tpl被拉入smartyinstall文件夹中的index.html页面。
所以,你必须从那里开始。 在我的例子中,我试图包含的标题是:siteroot / includes / navBar.php
所以,我不得不写include('../ includes / navBar.php');,只上一个目录,而不是四个。
我希望这能帮助每个有这样问题的人!
将php包含在smarty .tpl文件中被认为是非常糟糕的做法,因此我强烈建议您不要以这种方式添加代码。 禁用{php}
标记的主要原因之一是帮助防止代码注入攻击。 电子商务网站本质上是攻击的天然目标。
更好的方法是覆盖FrontController
类,将自定义代码分配给smarty变量 - 然后可以将其插入header.tpl而无需使用php include()
。
由于Prestashop 1.4.x中提供了类和控制器覆盖,因此您没有必要采用黑客攻击和/或修改核心发行版。
保罗
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.