特性
Smarty 的一些功能
- 它非常快。
- 它很有效,因为 PHP 解析器会执行繁琐的工作。
- 没有模板解析开销,只编译一次。
- 它能够智能地只重新编译那些已更改的模板文件。
- 您可以轻松地创建您自己的自定义标签和修改器,以便极大地扩展模板语言。
- 可配置模板{delimiter}标签语法,以便您可以使用
{$foo}
、{{$foo}}
、<!--{$foo}-->
等。 {if}..{elseif}..{else}..{/if}
构造会传递给 PHP 解析器,以便{if...}
表达式语法可以像您希望的那样简单或复杂。- 允许无限地嵌套
部分内容
、if
等。 - 内置缓存支持
- 任意模板源
- 模板继承可以轻松管理模板内容。
- 插件架构
显示代码与应用程序代码的分离
- 这意味着模板当然可以包含逻辑,条件是它仅用于表示。诸如 包括 其他模板、交替表格行颜色、大写 变量、循环遍历数据数组并渲染它等内容表示演示逻辑的示例。
- 但这并不意味着 Smarty 迫使业务和演示逻辑分离。Smarty 不知道什么是哪个,所以在模板中放置业务逻辑是您自己的行为。
- 此外,如果您希望在模板中没有逻辑,您当然可以通过将内容简化为仅限文本和变量来做到这一点。
它是如何工作的?
在后台,Smarty 将模板“编译”(基本上复制和转换)成 PHP 脚本。这在每次首次调用每个模板时发生一次,然后从那以后使用已编译的版本。Smarty 会为您处理此操作,所以模板设计人员只需编辑 Smarty 模板,而无需管理编译的版本。这种方法使模板易于维护,同时由于已编译代码只是 PHP,因此还能保持非常快的执行时间。当然,所有 PHP 脚本都利用 PHP 操作代码高速缓存(例如 APC)。
模板继承
模板继承在 Smarty 3 中引入。在模板继承之前,我们在头文件和页脚模板等分段管理我们的模板。这种组织会带来许多需要进行一些多余动作的问题,例如在每个页面中管理头/尾中的内容。使用模板继承,我们可以将模板保持为单个页面,而不需要包括其他模板。然后,我们可以通过继承来操作其中的内容块。这使得模板具有直观性、高效性和易于管理。有关更多信息,请参阅 模板继承。
为什么不使用 XML/XSLT 语法?
有几个充分的理由。首先,Smarty 不仅可用于基于 XML/HTML 的模板,还可用于生成电子邮件、javascript、CSV 和 PDF 文档。其次,XML/XSLT 语法比 PHP 代码更冗长且脆弱!它非常适合计算机,但对人来说很糟糕。Smarty 的重点在于易于阅读、理解和维护。
模板安全
虽然 Smarty 让您与 PHP 隔离,但如果您愿意,仍可以选择在某些方面使用它。模板安全会强制限制 PHP(以及选择 Smarty 函数)。如果您有第三方编辑模板,而不希望向他们提供 PHP 或 Smarty 的全部功能,这很有用。
整合
Smarty 有时与模型-视图-控制器 (MVC) 框架相比较。Smarty 不是 MVC,它只是一个表示层,很像 MVC 中的视图 (V) 部分。事实上,Smarty 可以轻松地集成到 MVC 的视图层中。许多比较流行的框架都提供了与 Smarty 集成的说明,或者您可以在论坛和文档中找到一些帮助。
其他模板引擎
Smarty 并不是唯一遵循“将编程代码与表示层分离”理念的引擎。例如,Python 有基于相同原理构建的模板引擎,例如 Django Templates 和 CheetahTemplate。注意:Python 这样的语言不会原生混合 HTML,这使它们从一开始就具有良好的编程代码分离优势。有可用于将 Python 与 HTML 混合的库,但它们通常会被避免使用。
Smarty 是什么
Smarty 不是应用程序开发框架。Smarty 不是 MVC。Smarty 不是 Laravel、Symfony、CodeIgniter 或任何其他适用于 PHP 的应用程序开发框架的替代品。
Smarty 是一个模板引擎,可用作应用程序的(V)iew 组件。Smarty 可以轻松地与上面列出的任何引擎耦合为视图组件。与任何其他软件一样,Smarty 也有一定的学习曲线。Smarty 无法保证良好的应用程序设计或适当的表示层分离,这仍然需要由合格的开发人员和 Web 设计人员解决。
Smarty 适合我吗?
Smarty 并不适合所有任务。重要的是要确定 Smarty 是否适合您的需求。有一些重要的问题需要您自问:
模板语法
您是否喜欢将 PHP 标签与 HTML 混合使用?您的 Web 设计师是否熟悉 PHP?您的 Web 设计师是否更喜欢为表示层设计基于标签的语法?同时使用 Smarty 和 PHP 的一些经验有助于回答这些问题。
业务用例
是否存在将模板与 PHP 隔离的要求?是否有您不希望将 PHP 的强大功能释放给他们的不受信任的模板编辑人员?您是否需要以编程方式控制模板中可用和不可用的内容?Smarty 在设计上提供了这些功能。
功能集
Smarty 的缓存、模板继承和插件架构等功能是否可以通过编写原本需要代码的开发周期?您计划使用的代码库或框架是否为表示层组件提供了您所需的功能?
使用 Smarty 的网站
许多著名的 PHP 项目都使用了 Smarty,例如 XOOPS CMS、CMS Made Simple、Tiki Wiki CMS Groupware 和 X-Cart 等。
总结
无论您将 Smarty 用于小型网站还是大型企业解决方案,它都可以满足您的需求。Smarty 有许多特性使其成为一个不错的选择:
- 将 PHP 与 HTML/CSS 分离很有意义
- 可读性有助于组织和管理
- 安全性用于第三方模板访问
- 功能完整,可以轻松扩展以满足您自己的需求
- 庞大的用户群,Smarty 会一直存在
- 适用于商业用途的 LGPL 许可
- 100% 免费使用,开源项目