我正在使用Prestashop为客户端创建一个店面。Prestashop使用Smarty.TPL文件。我仔细阅读了一些巧妙的文档,并在网上搜索了一下,但所有的建议都不起作用。
我首先使用常规的.php页面创建了一个网站,并且在每个页面上都包含了header.php。
然后我为prestashop制作了一个目录并进行了设置。我编辑了header.tpl文件,并能够在header.php代码中进行硬编码。问题在于:;当我想编辑标题(导航栏、图片、社交媒体(时,我必须在两个不同的地方编辑它。所以我尝试"包含"我的header.php文件。
不过,当我尝试使用smarty的{include_PHP"file.PHP"}和/或{PHP}include...{PHP},Prestashop出错并给我一个空白的白色页面-没有给出任何错误-(在chrome中,它给了我一个"服务器错误"(,直到我去掉includes。
我试着用一个巧妙的include和另一段有头挂钩的代码替换整个header.tpl代码,但这些都不起作用。有什么建议吗?我只想要一个标题,我只需要编辑一次就可以进行更改。
使用Prestashop v 1.4.4.0
编辑:我将allow_php从false更改为true。现在它正在尝试添加该文件,尽管它说找不到该文件。我把它放在header.tpl旁边,只使用了:
{php}
include('navBar.php');
{/php}
已回答!
当使用Smarty.TPL文件时,当您包含某些内容时,您不会从正在处理的文件的路径进行包含。您会从索引所在的位置进行包含。
示例:
我正在开发header.tpl,它位于:siteroot/smartyinstall/themes/主题名称/header.tpl
include在查找文件时,实际上是在smarty根文件夹中查找文件,因为header.tpl被拉入smartyinstall文件夹中的index.html页面。
所以,你必须从那里开始。在我的案例中,我试图包含的标题位于:siteroot/included/navBar.php
所以,我不得不写include('../includes/navBar.php(;,只上一个目录,而不是四个。
我希望这能帮助到每一个有这样问题的人!
在smarty.tpl文件中包含php被认为是非常糟糕的做法,因此我强烈建议您不要以这种方式添加代码。禁用{php}
标记的主要原因之一是为了帮助防止代码注入攻击。电子商务网站本质上是利用的自然目标。
一个更好的方法是重写FrontController
类,将自定义代码分配给一个智能变量——然后可以将其插入header.tpl,而无需使用php include()
。
由于Prestashop 1.4.x中提供了类和控制器重写,因此您没有真正的理由需要对核心发行版进行黑客攻击和/或修改。
Paul