在 Smarty tpl 文件中使用 PHP 代码

Posted

技术标签:

【中文标题】在 Smarty tpl 文件中使用 PHP 代码【英文标题】:Using PHP code in Smarty tpl FIle 【发布时间】:2011-11-18 19:09:08 【问题描述】:

我是 smarty 的新手,我想在模板文件(即 tpl 文件)中使用 php 代码。我看过文档并在谷歌上搜索过,但找不到如何使用 php 代码,他们说我们需要配置 smarty 以允许 php 执行,但找不到怎么做。

请在这方面帮助我。 谢谢

【问题讨论】:

您不应该将 PHP 代码放在模板中。你想在里面放什么样的代码? 如果您是这个模板系统的新手,也许您没有正确使用它。如果您需要插入 PHP,这听起来很像,因为模板系统的全部目的是将 PHP 与标记分开。之所以这么说,是因为您承认自己是新手,因此您还将考虑在 .tpl 文件中消除对 PHP 的需求的选项。但也许你确切地知道你在做什么,希望你能在这里得到答案。 @Galen,有时需要将 PHP 放入 .tpl 文件中,例如在使用仅允许访问 .tpl 文件的商业编码 PHP 应用程序时。 如果应用程序只允许编辑 Smarty 文件,无法引入您自己的 Smarty 标记/修饰符回调,但 允许 允许您将 PHP 代码直接嵌入到这些模板中,那么对我来说这听起来像是一个设计得很糟糕的应用程序。 【参考方案1】:

在您的主机目录中找到文件smarty.class.php

转到smarty.class.php

编辑var $php_handling = SMARTY_PHP_ALLOW

将文件保存在服务器中。

现在您可以在 tpl 文件中添加 php 为 <?php ....code.... ?>

【讨论】:

【参考方案2】:

像煮鸡蛋一样简单!

phpecho "hello!"/php

Second link down,供参考。

从 Smarty 3.1 开始编辑:

从 Smarty 3.1 开始,php 标签只能从 SmartyBC 获得。

来源:http://www.smarty.net/docs/en/language.function.php.tpl

【讨论】:

IMNSHO,that 是为什么 php 标签是 Evil 的完美例子:你是否在没有 any 标记的情况下写入模板 hello!结果完全一样(更不用说更快了)。 我已经看到了,但是当我在标签之间添加任何东西时,没有任何反应,它没有被执行。在文档中我找到了这个 [link]smarty.net/docs/en/variable.php.handling.tpl 但我无法配置 smarty 来执行 php 代码。 @Piskvor,这是一个例子,克服它。【参考方案3】:

您是否尝试过启用错误报告?

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

【讨论】:

【参考方案4】:

你可能看过文档,但你错过了php

php 标签允许将 PHP 代码直接嵌入到模板中。无论 $php_handling 设置如何,它们都不会被转义。 这仅适用于高级用户,通常不需要也不推荐。

强调我的,来源:http://www.smarty.net/docsv2/en/language.function.php.tpl

请注意,将 PHP 放在模板代码中是最简单的方法——Smarty 的主要目的是将 PHP 代码和 html 模板分开。换句话说,使用这个标签本身就是一个严重的危险信号。在大多数情况下,可以解决根本问题,并完全避免在模板中使用 PHP。

【讨论】:

(我曾与 Smarty 合作过一段时间,使用 php总是每次都会回来咬我。) 我已经看到了,但是当我在标签之间添加任何东西时,没有任何反应,它没有被执行。在文档中我找到了这个 [link]smarty.net/docs/en/variable.php.handling.tpl 但我无法配置 smarty 来执行 php 代码。 @jawad waheed:您链接的页面中的第三句话:“请注意,这不会影响模板中 php/php 标记中的 php 代码。”问题可能出在其他地方(定制的 Smarty 安装?)

以上是关于在 Smarty tpl 文件中使用 PHP 代码的主要内容,如果未能解决你的问题,请参考以下文章

如何实现php仲smarty的一个列子

PHP——smarty模板(第一天)

强制 Smarty 显示 PHP 错误

php中smarty怎么赋值变量到模板

php + smarty

第一个 smarty 程序