当前位置: 首页 > 文章教程  > 计算机与互联网 > 网络编程

4.16Smarty——应用模板引擎更有效地管理外观

9/17/2020 9:43:31 PM 人评论

4.16Smarty——应用模板引擎更有效地管理外观

4.16 Smarty——应用模板引擎更有效地管理外观

PHP的显著特征是,在HTML文件中插入<?PHP ?>样的程序块,能够很简单地实现动态画面。但是,随着在HTML文档中插入的逻辑越来越复杂,程序显得杂乱无章,可读性显著下降。当然代码的可维护性也显著下降了。对于那些脚本与HTML胶合在一起的代码,就算只是想修改一下画面的外观,不是专业的程序员就不能胜任,更别说想请专业的美工来对画面做些设计。

要解决上述矛盾,必须要像已经在Java等语言中广泛应用的,将逻辑与画面外观分离的技术。让程序员负责逻辑部分的开发工作,而将画面的外观设计交给美工。两者可以并行的进行作业,既提高了开发效率,又提高了应用程序的可维护性,同时将合适的工作交给擅长的人员担任,可以提高程序的品质。应用PHP技术,进行大规模的系统构筑,将逻辑与外观分离是必要条件。

这时出现了称为“模板引擎”的技术,模板引擎是为模板的生成而专门定制的技术。没有PHP那样的灵活,但是提供了非常简洁的功能。使用模板引擎后,能够更简单地设计画面外观。

PHP中能使用的模板引擎有很多种,本书采用了普及程度高、功能优秀的“Smarty”模板引擎。

alt

本例要点

Smarty有许多优点,下面列举出其中重要的几点。

高速性

Smarty是编译型的模板引擎。一般情况下,模板引擎因为要解析独自的语法,处理速度将会变慢。而Smarty将会在初次运行时,事先将模板进行转换成PHP脚本的工作,并将其保存在规定的目录之下(这就是所谓的编译)。在第二及以后的执行时,使用这些已经转换成PHP脚本的,能够保持通常的PHP脚本一样的性能。另外,其中强化了缓冲功能,因其具备了以最终输出结果页为单位,或以fragment为单位的缓冲功能,所以对那些处理负担很高的页面来说,也能实现高速的显示。

函数丰富

条件判断、循环控制、模板嵌套、读取设定文件、变量的预处理等,在普通的生成画面外观中所需要的功能都具备了,因此能够灵活地处理复杂画面的构筑。

另外,在Smarty中嵌入自己的套件,能够定制模板引擎本身的功能。

普及程度高

PHP中,模板引擎的使用情况,应该说还不是很普遍,这当中相对来说Smarty是应用得比较多的一种模板引擎。相关文档很充实,现在各种杂志、书籍上有很多介绍Smarty的资料。作为一个很重要的非技术因素,普及程度高的技术,学习起来要容易掌握。

Smarty的配置方法将在后面的补充中进行些详细的介绍,这里先从例子着手,讲解其基本结构。

目录结构

alt

本例代码

alt

包含进Smarty的主类。

alt

继承Smarty的主类(Smarty类),定义自己的控制类MySmarty。其他的程序中,就不用再继承这个MySmarty类来定义新类了。

alt

定义构造函数,从PHP5开始构造函数名统一变成了__construct(),PHP4的构造函数名与类名相同。

alt

调用与母类Smarty同名的构造函数(2008年5月为止Smarty类的构造函数还是与类名同名的Smarty)。

alt

放置模板文件的目录设置为./templates,放置编译后文件的目录设置为./templates_c,放置缓冲数据的目录设置为./cache,本书中将缓冲功能设置为无效,如果要使缓冲功能变为有效,请将caching属性改为TRUE。

alt

包含进定义MySmarty类的MySmarty.class.php脚本。

alt

实例化MySmarty类。设置模板变量MyName的值。模板变量就是在模板文件中可以使用的变量。除了简单变量外,还可以指定为联想数组、对象等。

alt

根据以上的设置,调用模板文件sample.tpl。系统会去先前定义的template_dir目录下检索模板文件。

alt

在模板文件中,能以{$变量名}的形式显示变量值,其他的,数组时{$变量名[序号]},联想数组时{$变量名.键名},对象时{$变量名->属性}。

escape是Smarty中事先提供的变量修饰符。Smarty中,以{$变量名|修饰符:参数}的形式设定变量值时,会以修饰符参数的规定形式显示变量值。此处的escape修饰符,将对变量中还有的如“<”、“>”、“&”样的字符进行HTML代码转换。

alt

补充

注意事项

本节使用的Smarty是外部程序库,在运行上述程序前,必须导入到系统中。Smarty的代码已经放在本书附带的光盘中了,但是,因为Smarty会进行频繁的升级,建议你下载最新的版本。

Smarty的下载与设置

利用Smarty时,需要从Smarty官方网站(http://www.fpdf.org/)下载。

解压缩下载的Smarty-X.X.X.zip(X.X.X为版本号)后,将目录下的“lib”文件夹改名为“Smarty”,并复制到PHP的include_path的目录下(Windows环境默认在“C:\php\includes\”,Linux环境默认在“/usr/local/lip/php/”目录中)。

生成模板文件用的文件夹

为了使用Smarty,需要生成放置模板文件的文件夹,可以在任意目录下生成。本节的例子中在执行PHP脚本相同的目录,如表4-13所示。

表4-13 Smarty运行需要的目录

alt

在Linux环境中,要使PHP能够操作文件,必须将“templates_c”目录的读写权限设置为“777”。

MySmarty.class.php的作用

一般在使用Smarty时,不是直接使用Smarty提供的Smarty类(Smarty.class.php),而是要提供继承Smarty类的派生类。

这样,Smarty的基本设定(文件夹路径等)委托给Smarty的派生类了,其他各个文件中再也不用进行相同的设定了。本节只是演示了MySmarty.class.php中必需的最小限度的配置,其他的与应用程序相关的共同配置,可根据需要进行追加。Smarty类的派生类的详细资料参照后面的5.3节。

模板文件的放置场所

本节为了简化操作,将模板文件直接放在终端用户可以访问的目录下了,一般情况下这样做是恰当的。因为,如果终端用户知道了这个模板文件的放置目录,他就可以看到这些模板文件的代码了。实际的系统构筑时,务必将模板文件放到终端用户不能访问的目录下。

使用缓冲时的注意事项

要点中已经介绍过,Smarty中集成了高级的缓冲功能。但是使用这个功能时,需要注意的是,如果是频繁更新的页面,不注意将其缓冲后,会出现实际的数据与缓冲的内容不一致的情况。

进行缓冲的应该是那些不怎么频繁更新的页面,或者多少信息有点旧,也不影响大局的内容。本书为了防止这些不经意出现的不一致的情况,而将缓冲功能设置为无效了。

相关教程

共有条评论 网友评论

验证码: 看不清楚?