根据作者的实际经验, Smarty 的语法不但 非常简单直观,而且只需要掌握一些最初级的语法,就足可以应付绝大多数的应用。即使是 不懂编程的网页设计师,也很容易就能够掌握。 编译机制。Smarty 的“编译”机制,节省了用于反复解析模板文件的时间,极大地提高了 速度。由于“编译”后生成的是标准的 PHP 文件,因此从理论上来说,执行的速度不会低于 没有模板的 PHP 应用的速度。在一些和解析型模板引擎进行的对比测试中,Smarty 在第一 次访问时落后, 但是在以后的访问中速度远远超出竞争对手。 而且, 这种编译过程是智能的, 在模板文件的内容被改变后,Smarty 会自动重新编译,因此对于开发者来说,编译过程完 全无需人工干预。另外,如果你愿意的话,生成的 PHP 文件还可以方便地应用于 Zend Accelerator 这样的工具,进行二次编译。 除此之外,Smarty 还拥有其他一些优秀的特性: 缓存机制。由于实现了编译机制,在接收到对某个模板文件的访问请求时, Smarty 会 自动将它重定向到编译后的 PHP 文件。但是,这也意味着,Smarty 也可以将它重定向到任 何其他的文件——例如静态的 HTML 文件。在此基础之上,Smarty 实现了自己的基于页面 的缓存机制。Smarty 能够将编译后的 PHP 文件产生的结果——静态 HTML——保存起来, 将重复发送的请求直接重定向给它, 这意味着对于第一次之后的请求, 不需要执行任何 PHP 代码(Smarty 本
身的代码当然除外) 。对于不需要频繁更新的页面(我们知道这种网页往往 在整个网站中占大多数) ,通过这种缓存机制获取的性能提升是惊人的。而且,由于它是在 页面级实现的,因此完全无须涉及到复杂的对象级缓存问题,保持了逻辑上的简单性。 可配置性。Smarty 在开发之初就将高度的可配置性作为自己的一个
设计目标。它本身 以 100%的 PHP 编写,以源代码的方式发行,只需要将 Smarty 简单地拷贝到你的文件路径 中,就可以使用了。Smarty 的各项配置变量,都可以通过修改 config 文件或者手动编码进 行定制。例如,Smarty 默认的定界符是花括号({}) ,但是这往往和 Javascript 以及 CSS 中 的花括号冲突。为了解决这一问题,可以简单地将默认定界符修改为其他的字符(例如 ASP 风格的“<%”和“%>”) 。 &;#61548; 可扩展性。Smart 的实现基于面向对象的架构,并且提供了插件机制,非常 便于用户修改和扩展其默认的认为。当然,你也可以直接修改它的
源代码来达到目的。 (对 于基于脚本语言的开源应用来说,这是非常惬意的,因为你甚至不需要重新编译。 ) 让我们来看一个最简单的 Smarty 应用。这个应用包括两个文件: TestSmarty.php 调用 Smarty 类库,初始化变量,并解析相应的模板文件 TestSmarty.tpl 模板文件,其实就是包含了 Smarty 标签的 HTML,放在指定的模板目录 下,默认是./templates TestSmarty.php 的内容如下: $Smarty = new Smarty(); $Smarty->assign("HelloStr", "Hello, world"); $Smarty->display("TestSmarty.tpl"); ?> 这个文件的内容非常简单,任何有过 PHP 经验的程序员都应该能够理解:首先将 Smarty 类库所在的文件 include 进来,然后创建一个新的 Smarty 对象,并对 HelloStr 变量进 行赋值,最后解析 TestSmarty.tpl 文件。 TestSmarty.php 的内容如下: This is a string from Smarty: {$HelloStr} 解析的结果为: This is a string from Smarty: Hello, world 此时检查存放编译后的 PHP 文件的子目录(默认是./templates_c),可以找到一个名叫 %%65^650^65099D8B%%TestSmarty.tpl.php 的文件,内容如下: This is a string from Smarty: _tpl_vars["HelloStr"];