在Smarty tpl文件中使用PHP代码

14

我是新手学习smarty模板引擎,想在模板文件(tpl文件)中使用php代码。我查看了文档并在谷歌上搜索,但无法找到如何使用php代码的方法。他们说我们需要配置smarty以允许php执行,但无法找到如何实现。

请帮助我解决这个问题,非常感谢!


2
你不应该在模板中放置PHP代码。你想要放置什么样的代码? - Galen
1
如果您是第一次使用此模板系统,也许您没有正确使用它。如果您需要插入PHP,那么这似乎是错误的,因为模板系统的整个目的就是将PHP与标记分离。我之所以这样说,是因为您承认自己是新手,所以您也应该考虑消除在.tpl文件中使用PHP的需求。但也许您确切地知道自己在做什么,在这种情况下,希望您能在这里得到答案。 - C. E.
1
@Galen,有时候需要将PHP代码放在.tpl文件中,例如在使用商业加密的PHP应用程序并且只允许访问.tpl文件时。 - Prisoner
如果一个应用程序只允许编辑Smarty文件,而没有能力引入自己的Smarty标签/修饰符回调函数,但是确实允许您直接嵌入PHP代码到这些模板中,那么对我来说,它听起来像是一个设计非常糟糕的应用程序。 - IMSoP
4个回答

29

1
在我看来,这正是为什么{php}标签是邪恶的完美例子:如果你不使用任何标记将hello!写入模板,结果将完全相同(更快)。 - Piskvor left the building
我看到过这个问题,但是当我在标签之间添加任何内容时,什么也不会发生,它不会被执行。在文档中,我找到了这个链接smarty.net/docs/en/variable.php.handling.tpl,但我无法配置smarty来执行php代码。 - jawad waheed
9
@Piskvor,这只是一个例子,请别纠缠于此。 - Prisoner

4
在您的主机目录中找到文件smarty.class.php
进入smarty.class.php
编辑var $php_handling = SMARTY_PHP_ALLOW
保存文件到服务器。
现在,您可以在tpl文件中添加php,如<?php ....code.... ?>

2
您可能已经看过文档,但您错过了{php}标记:
{php}标记允许将PHP代码直接嵌入模板中。无论$php_handling设置如何,它们都不会被转义。这只适用于高级用户,通常不需要也不推荐使用。 强调我的话,来源:http://www.smarty.net/docsv2/en/language.function.php.tpl 请注意,在模板代码中放置PHP是在自己的脚上拿枪最简单的方法 - Smarty 的主要目的是将 PHP 代码和 HTML 模板分离。换句话说,仅仅使用该标记就是一个严重的红旗;在大多数情况下,可以修复潜在问题,并完全避免使用模板内的PHP。

我曾经与Smarty一起工作过,但是使用{php}每一次都会让我吃苦头。 - Piskvor left the building
我看到过这个问题,但是当我在标签之间添加任何内容时,什么也不会发生,它不会被执行。在文档中,我找到了这个链接http://www.smarty.net/docs/en/variable.php.handling.tpl,但我无法配置Smarty来执行PHP代码。 - jawad waheed
@jawad waheed:你链接页面的第三句话是:“请注意,这不会影响模板中{php}{/php}标签内的PHP代码。”问题很可能出在其他地方(自定义Smarty安装?) - Piskvor left the building

-1

你尝试过启用错误报告吗?

error_reporting(E_ALL);
ini_set("display_errors", true);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接