首页 理论教育PHPMVC开发实战:版Smarty模板引擎简介

PHPMVC开发实战:版Smarty模板引擎简介

【摘要】:Smarty并不是一项新的PHP技术,而在PHP 4.x以前就已经是非常流行的界面与后台相分离的技术。直至现在,Smarty依然盛行,这点从各大招聘网站中可见一斑。所以要深入理解这两者之间的关系,还需要读者真正掌握Smarty的使用。图13-1 Smarty前台后分离图13-2 Smarty执行流程相信读者对Smarty的执行流程并不陌生,因为前面介绍的ThinkPHP模板引擎就是以相同的方式处理模板的。所以本章重点介绍Smarty引擎,读者在深入掌握该模板引擎的使用后,将会对MVC设计有更深入的认识。

Smarty并不是一项新的PHP技术,而在PHP 4.x以前就已经是非常流行的界面与后台相分离的技术。由于PHP的特性,早期的PHP编程要实现MVC编程非常困难,但Smarty出现之后,虽不能说是MVC编程,但至少实现了部分MVC编程思想,以至于现在主流的MVC框架或多或少都受Smarty影响。

Smarty的本质是分离代码,使得美工与后台的逻辑在一定程序度相分离,以便更好地分工合作。这种分工合作不仅能够提高开发效率,而且能够有效改善代码质量,为后期网站的维护提供极大的便利,如图13-1所示。

在早期的PHP开发模式中,能够真正实现MVC设计的PHP框架并不多,所以当时几乎由Smarty主导。直至现在,Smarty依然盛行,这点从各大招聘网站中可见一斑。本书是介绍PHP MVC的,理论上MVC框架就能实现美工与界面相分离,但MVC是一种模式,而Smarty只是模式中的一个部件而已。所以要深入理解这两者之间的关系,还需要读者真正掌握Smarty的使用。

Smarty与MVC不同之处在于Smarty并不负责后台逻辑的处理,普通的PHP程序只需要包含Smarty入口文件,其他的编程模式可以使用传统的PHP面向对象或面向过程方式实现。Smarty在处理模板时,首先由PHP分析当前请求是否应用Smarty,然后对相关的请求文件进行静态化处理,如果存在缓存则直接返回该文件的缓存;否则执行模板解释工作,将前台设计人员设置的模板标签解释为PHP标准代码,并且生成预编译文件。

这个过程只需要在第一次解释模板或者模板标签改变时执行,下次执行时直接获取解释后的结果即可,避免重复解释,这在一定程度上改善了PHP运行效率;最后将生成后的缓存返回给浏览用户,如图13-2所示。

978-7-111-42852-7-Part02-744.jpg

图13-1 Smarty前台后分离

978-7-111-42852-7-Part02-745.jpg

图13-2 Smarty执行流程

相信读者对Smarty的执行流程并不陌生,因为前面介绍的ThinkPHP模板引擎就是以相同的方式处理模板的。不仅同样支持PHP编译,而且使用assign方法分配变量;在模板设计层面,同样也使用标签,这些都是Smarty原本就有的特色功能。(www.chuimin.cn)

除了Smarty引擎之外,常见的模板引擎如下。

➢PHPLIB:一套古老且主流的模板引擎,直接在HTML中使用PHP变量进行编程。

➢Template Blocks:一款轻巧且速度非常快的PHP模板引擎,支持XML语法。

➢TinyButStrong:小强模板,业界非常著名好用的模板引擎,直接支持Dreamweaver插件编辑。

➢Rain TPL:易于使用和安装引擎,有6个标签、3个PHP函数和2个PHP类。支持对模板中的相对路径自动转换为绝对路径

➢PHPTAL:PHPTAL是一个ZPT的PHP执行。简而言之,PHPTAL是一个PHP下的XML/XHTML模板库。

➢PHP Template Engine:类似于PHPLIB,但支持在模板中使用Cookie、Session。

通过前面的介绍,可以看到PHP模板引擎主要分为两类:一类是直接在模板中使用PHP语法作为模板标签;另外一类是使用特定的语法标记作为模板标签。在这两类模板中,基于PHP语法的模板引擎由于不需要开发员掌握额外的知识,所以越来越受到开发人员的欢迎,本书一开始介绍的几种主流MVC框架模板引擎都使用类似技术。

使用特定语法的模板引擎由于性能问题,近年来受到一些诟病,但由于其能够真正将界面设计人员与PHP开发人员很好地分离,所以在大型项目开发中具有不可替代的作用,而这一类的模板引擎最流行的就是Smarty了。所以本章重点介绍Smarty引擎,读者在深入掌握该模板引擎的使用后,将会对MVC设计有更深入的认识。