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



我正在使用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

最新更新