理念
什么是 Smarty?
Smarty 是一个 PHP 的模板引擎。更具体地说,它提供了一种可管理的方式来将应用逻辑和内容与其呈现方式分离。这在应用程序员和模板设计师扮演不同角色,或者在大多数情况下不是同一个人的情况下,描述得最好。
例如,假设你正在创建一个展示报纸文章的网页。
-
文章的
$headline(标题)、$tagline(标语)、$author(作者)和$body(正文)是内容元素,它们不包含任何关于如何展示它们的信息。它们被应用程序传递给 Smarty。 -
然后模板设计师编辑模板,并使用 HTML 标签和模板标签的组合来格式化这些变量的呈现方式,如表格、div、背景颜色、字体大小、样式表、svg 等。
-
有一天,程序员需要改变获取文章内容的方式,即改变应用逻辑。这个改变不会影响模板设计师,内容仍然会以相同的方式到达模板。
-
同样,如果模板设计师想要完全重新设计模板,这将不需要改变应用逻辑。
-
因此,程序员可以更改应用逻辑而无需重构模板,模板设计师可以更改模板而不会破坏应用逻辑。
目标
Smarty 的设计主要受到以下目标的驱动:
- 将展示层从应用代码中清晰地分离出来
- PHP 后端,Smarty 模板前端
- 补充 PHP,而不是替代它
- 对程序员和设计师来说,快速开发/部署
- 快速且易于维护
- 语法易于理解,不需要 PHP 知识
- 对自定义开发的灵活性
- 安全性:与 PHP 隔离
- 免费,开源
两种思维方式
在 PHP 模板方面,基本上有两种思维方式。第一种观点宣称"PHP 就是一个模板引擎"。这种方法简单地将 PHP 代码与 HTML 混合在一起。尽管从纯粹的脚本执行角度来看,这种方法是最快的,但许多人会争论,当与 HTML 等标记语言混合时,PHP 语法会变得混乱和复杂。
第二种观点宣称,展示应该完全没有所有的编程代码,而是使用简单的标签来指示应用内容在哪里显示。这种方法在其他模板引擎(甚至在其他编程语言中)很常见,也是 Smarty 采取的方法。其想法是让模板专注于展示,避免应用代码,并尽可能少的开销。
为什么要将 PHP 与模板分离?
主要有两大好处:
-
语法:模板通常由 HTML 等语义标记组成。PHP 语法适用于应用代码,但与 HTML 混合时会迅速退化。Smarty 的简单{tag}语法专门设计用来表示展示。Smarty 使你的模板更专注于展示,而不是"代码"。这有助于更快地部署模板并更容易维护。Smarty 语法不需要 PHP 的工作知识,对程序员和非程序员来说都很直观。
-
隔离:当 PHP 与模板混合时,对于可以注入到模板中的逻辑类型没有限制。Smarty 使模板与 PHP 隔离,创建了一种控制的方式,将展示层与业务逻辑分离。Smarty 还有一些安全特性,可以进一步强制对模板的限制。
网页设计师与 PHP
一个常见的问题:"网页设计师必须学习语法,为什么不学 PHP?"当然,网页设计师可以学 PHP,他们可能已经熟悉它。问题不在于他们学习 PHP 的能力,而在于将 PHP 与 HTML 混合的后果。如果设计师使用 PHP,很容易在模板中添加不应该存在的代码(你刚刚给他们一把瑞士军刀,他们只需要一把刀)。你可以教他们应用设计的规则,但这可能是他们真的不需要学习的东西(现在他们是开发者!)PHP 手册也是一堆令人难以理解的信息。这就像给车主一份工厂装配手册,而他们只需要车主手册。Smarty 为网页设计师提供了他们需要的确切工具,并为开发者提供了对这些工具的精细控制。标签式语法的简单性也非常受设计师欢迎,它帮助他们简化模板的组织和管理。