【发布时间】:2008-10-13 12:46:45
【问题描述】:
什么是最好的/最容易集成 PHP 模板系统,使用它有什么好处?
我目前根本不使用它,我认为这可能有助于将内容与演示文稿分开更多一点。
【问题讨论】:
-
更多信息请见this question
-
正如@Jrgns 所说,更全面的细分如下:stackoverflow.com/questions/62617/…
什么是最好的/最容易集成 PHP 模板系统,使用它有什么好处?
我目前根本不使用它,我认为这可能有助于将内容与演示文稿分开更多一点。
【问题讨论】:
PHP 本身就是一种很好的模板语言。由于这个原因,大多数领先的 PHP 框架不使用单独的模板语言。
只要确保您使用(类似的)MVC,并且不要在您的视图文件中执行任何数据访问或业务逻辑。
我也广泛使用 Smarty,但发现它与直接的 PHP 相比没有什么优势,除了强迫你保持你的观点愚蠢。对设计师来说,它可能看起来也更好一些,但对你来说,它的缺点是灵活性,模板实现者。循环三重嵌套数组之类的事情比直接使用 PHP 更难。
【讨论】:
我发现它快速、易于使用且易于安装(即使在共享主机环境中)。它也不需要您使用验证 XHTML,这有时很方便(尽管我认为 确实 需要有效 XHTML 的模板引擎可能更快。)
将您的内容放在一个地方并在另一个地方编写代码真是太好了。
此外,您不仅限于 HTML。我使用 Smarty 生成 XML 甚至 SQL。
【讨论】:
要跟进 Alex 所说的话,我建议看一下 Rasmus Lerdorf 的文章 The no-framework PHP MVC framework。
Rasmus Lerdorf 是 PHP 的创始人。
【讨论】:
我赌PHPTAL。
它检查文件语法并确保输出是格式良好的 XML带有适当的转义。这可确保页面安全地抵御 XSS 攻击,而程序员不必每次都担心。
Smarty 和原始 PHP 不会自动处理转义,这意味着每个 echo $foo 或 ${foo}(没有 |escape} 或 htmlspecialchars())都可能是 HTML 注入漏洞或至少破坏格式良好。
PHPTAL 有很好的语法,适合 HTML/XML 的工作方式,例如当您想有条件地将某些内容包装在标签中时,您不必重复自己:
<strong tal:omit-tag="condition">
xxx
</strong>
而不是:
{if condition}<strong>{/if}
xxx
{if condition-again!}</strong>{/if}
而且语法是 XML,不会过于冗长(主要是添加属性)。没有 HTML 和自定义标记类结构的丑陋组合。
【讨论】:
除了 Mark 的经验,我发现 Smarty 非常适合扩展。我已经构建了一个(企业)MVC 框架,它带有基于 Smarty 的内置视图,既简单又灵活。大量可用的模板帮助函数也可以很容易地扩展。
【讨论】:
也许使用模板引擎最令人信服的原因是默认输出转义可以减少或消除 xss 漏洞。
【讨论】:
这取决于您的关注点:不同的模板引擎可以更好地处理不同的事情。 Smarty 与某些相比相对较重,并且定义了一种比 PHP 更简单但更受限制的语法。使用不像编程语言的语法有很多好处,例如,如果您要请图形设计师构建您的模板。
诸如Savant3 之类的模板引擎,或者在Zend Framework 的Zend_View 组件中使用的模板引擎是轻量级的,并且使用PHP 作为其语法。这为您的模板提供了更多的功能和灵活性,但要求您遵守将业务逻辑排除在模板之外的规则。此外,如果您的设计师要构建模板,PHP 语法可能过于复杂。
【讨论】:
我个人喜欢只使用单独的 PHP/HTML 文件的想法。它允许我根据需要使用其他 HTML 编辑器(例如 DreamWeaver),还可以让不懂 PHP 但知道 HTML 的人无需学习另一种语言即可编辑模板。
【讨论】:
我已经使用 Smarty 很多年了,但是因为特殊的 smarty 语法阻碍了我的使用而感到沮丧,在这种情况下,一些简单的 php 会更容易。 PHP 本身就是一种模板语言!我了解到 php api 足够适合所有的表示逻辑。
因此,Savant3 及其后代 Zend_View 是出色的解决方案。就像在 Smarty 中一样,您可以轻松地为重复性任务编写插件。
【讨论】: