5

什么是最好的/最容易集成 PHP 模板系统,使用一个模板系统有什么好处?

我目前根本不使用一个,并且我认为这可能有助于将内容与演示文稿分开一点。

4

9 回答 9

14

PHP 本身就是一种很好的模板语言。由于这个原因,大多数领先的 PHP 框架不使用单独的模板语言。

只要确保您使用(类似的东西)MVC,并且不要在您的视图文件中执行任何数据访问或业务逻辑。

我也广泛使用 Smarty,但发现它与直接 PHP 相比没有什么优势,除了强迫你保持你的观点愚蠢。对设计师来说,它可能看起来也更好一些,但对你来说,它的缺点是灵活性,模板实现者。循环三重嵌套数组之类的事情比直接使用 PHP 更难。

于 2008-10-13T14:47:07.630 回答
12

聪明的


我发现它快速、易于使用且易于安装(即使在共享主机环境中)。它也不需要您使用验证 XHTML,这有时很方便(尽管我认为确实需要有效 XHTML 的模板引擎可能更快。)

将您的内容放在一个地方并在其他地方编写代码真是太好了。

另外,您不仅限于 HTML。我使用 Smarty 生成XML甚至SQL

于 2008-10-13T12:47:49.993 回答
3

要跟进 Alex 所说的话,我建议看一下 Rasmus Lerdorf 的文章The no-framework PHP MVC framework

Rasmus Lerdorf 是创建 PHP 的人。

于 2008-10-13T14:51:36.200 回答
3

我赌PHPTAL

它检查文件语法并确保输出是格式正确的 XML ,并带有适当的转义。这确保了页面对 XSS攻击是安全的,而程序员不必每次都担心它。

Smarty 和原始 PHP 不会自动处理转义,这意味着每个echo $fooor ${foo}(没有|escape}or htmlspecialchars())都可能是 HTML 注入漏洞,或者至少会破坏格式良好。

PHPTAL 有很好的语法,适合 HTML/XML 的工作方式,例如,当您想有条件地将某些内容包装在标签中时,您不必重复自己:

<strong tal:omit-tag="condition">
  xxx
</strong>

而不是:

{if condition}<strong>{/if}
  xxx
{if condition-again!}</strong>{/if}

并且语法是 XML,但不会过于冗长(大多数情况下只添加了属性)。没有难看的 HTML 和自定义标记类结构的混合。

于 2009-03-29T19:40:07.180 回答
1

除了 Mark 的经验,我发现 Smarty 非常适合扩展。我已经构建了一个(企业)MVC 框架,它带有基于 Smarty 的内置视图,既简单又灵活。大量可用的模板帮助函数也可以很容易地扩展。

于 2008-10-13T12:50:42.857 回答
1

使用模板引擎最令人信服的原因可能是默认输出转义,它可以减少或消除 xss 漏洞。

于 2009-03-29T20:54:32.323 回答
0

这取决于您的关注点:不同的模板引擎可以更好地处理不同的事情。与某些相比, Smarty相对较重,并且定义了一种比 PHP 更简单但更受限制的语法。使用不像编程语言的语法有很多好处,例如,如果您要请图形设计师构建您的模板。

诸如Savant3 之类的模板引擎,或Zend 框架的Zend_View组件中使用的模板引擎是轻量级的,并且使用 PHP 作为其语法。这为您的模板提供了更多的功能和灵活性,但要求您遵守规则,将业务逻辑排除在模板之外。此外,如果您的设计师要构建模板,PHP 语法可能过于复杂。

于 2008-10-13T13:01:49.607 回答
0

我个人喜欢只使用单独的 PHP/HTML 文件的想法。如果我愿意,它允许我使用其他 HTML 编辑器(例如 DreamWeaver),并且还可以允许不了解 PHP 但了解 HTML 的人编辑模板,而无需学习另一种语言。

于 2008-10-13T17:21:27.133 回答
0

我已经使用 Smarty 很多年了,但是因为特殊的 smarty 语法阻碍了我的使用而感到沮丧,在这种情况下,一些简单的 php 会更容易。PHP 本身就是一种模板语言!我了解到 php api 足够适合所有表示逻辑。

因此,Savant3 及其后代 Zend_View 是出色的解决方案。就像在 Smarty 中一样,您可以轻松地为重复性任务编写插件。

于 2008-10-13T17:40:11.727 回答