Skip to content

特性

Smarty 的一些特性:

  • 它非常快。
  • 它是高效的,因为 PHP 解析器做了繁重的工作。
  • 没有模板解析开销,只编译一次。
  • 它对重新编译只有改变的模板文件非常聪明。
  • 你可以轻松创建自己的自定义函数变量修饰符,所以模板语言极其可扩展。
  • 可配置的模板{delimiter}标签语法,所以你可以使用{$foo}, {{$foo}}, <!--{$foo}-->等。
  • {if}..{elseif}..{else}..{/if}结构被传递给 PHP 解析器,所以{if...}表达式语法可以根据你的喜好进行简单或复杂的评估。
  • 允许无限嵌套sectionsif's等。
  • 内置caching支持
  • 任意模板
  • 模板继承以便于模板内容的管理。
  • 插件架构

将展示层从应用代码中分离

  • 这意味着模板可以包含逻辑,但条件是它只用于展示。例如包含其他模板、交替表格行颜色、大写一个变量、循环遍历数据数组并渲染它们是展示逻辑的例子。
  • 但这并不意味着 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 并不能保证良好的应用设计或适当的展示分离,这仍需要由一个有能力的开发者和网页设计师来解决。

Smarty 适合我吗?

Smarty 并不是适合所有工作的工具。重要的是确定 Smarty 是否符合你的需求。你需要问自己一些重要的问题:

模板语法

你是否满意 PHP 标签与 HTML 混合?你的网页设计师是否熟悉 PHP?你的网页设计师是否更喜欢为展示设计的基于标签的语法?有一些与 Smarty 和 PHP 都有经验的工作可以帮助回答这些问题。

商业案例

是否有需求将模板与 PHP 隔离?你是否有不信任的第三方编辑模板,你不希望给他们释放 PHP 的全部能力?你是否需要以程序化的方式控制模板中的可用和不可用内容?Smarty 设计上提供了这些能力。

功能集

Smarty 的功能,如缓存、模板继承和插件架构,是否可以节省编写其他必要代码的开发周期?你计划使用的代码库或框架是否有你需要的展示组件的功能?

使用 Smarty 的网站

许多知名的 PHP 项目都使用 Smarty,如 XOOPS CMS、CMS Made Simple、Tiki CMS/Groupware 和 X-Cart 等。

总结

无论你是为小型网站还是大型企业解决方案使用 Smarty,它都可以满足你的需求。有许多功能使 Smarty 成为一个很好的选择:

  • PHP 与 HTML/CSS 的分离就是有道理的
  • 可读性有助于组织和管理
  • 对第三方模板访问的安全性
  • 功能完整,且易于扩展以满足你自己的需求
  • 庞大的用户基础,Smarty 会一直存在
  • LGPL 许可证用于商业使用
  • 100%免费使用,开源项目