选择显示字体大小

[php]模板引擎smarty介绍

模板引擎smarty深入浅出介绍——php

来自: 模板引擎smarty cjjer 做了部分变动

php实现mvc开发模式的逻辑层和表示层有多种模板引擎可供选择,但是官方引擎smarty诞生后,选择就有了变化。它的理念和实现都是相当"前卫"的。本文主要讨论smarty之于其他模板引擎的不同特点,简要介绍了该引擎的安装及使用,并用一个小的测试案例对比了smarty和phplib template的速度和易用性。

一、mvc需要模板

mvc最早是在smalltalk语言的开发过程中总结出的一种设计模式,mvc分别代表了"模型"、"视图"和"控制",目的就是让不同的开发角色在大中型项目中各司其职。在网络应用程序的开发中,可以用下图来表示各概念之间的关系。

该图展示了一个简单的web应用程序,用户在浏览器上看到信息是数据库服务器上的内容,但在这之前经过了应用服务器加工。开发人员负责的就是建立数据结构、处理数据的逻辑以及表示数据的方法。

96年cgi在中国开始流行的时候,早期的web程序员都是从html开始自学成材的,在perl中print一行行的html并不是一件难事,但是随着网络的一步步提速,页面大小也从当初的二、三十k暴涨了十倍。写cgi程序就产生了一个迫切的要求:分开perlhtml源码。于是,社会进步体现在开发小组内部的分工上。由于美工和程序员对互相的工作并不是十分熟悉,在进行合作的过程中需要用一种约定的"语言"进行交流。

这种语言并不是我们的母语或者英语,术语叫做"模板",逻辑和表示依靠它联系。它是结合了html和脚本语言特征的一种表达方式。通过这种方式,表示层可以按照用户所希望的格式来显示经过逻辑层处理过的数据。如果你有windows平台下mfc的开发经验,那么一定会很熟悉document/document template/view的封装,这就是一个很典型的mvc例子。对于web应用来说,个人认为j2ee中的ejb/servlets/jsp是最强大的,当然还有简洁优美的structs。另一个很有名的实现就是com/dcom+asp,这个组合在我国是最多人使用的。

通过几种mvc实现在web应用程序里的对比,可以得到一个关于模板的概念:一组插入了html的脚本或者说是插入了脚本html,通过这种插入的内容来表示变化的数据。下面给出一个模板文件的例子,这个模板经过处理后在浏览器里显示"hello, world!"

<html>
   <head>
      <title>$greetings</title>
   </head>
   <body>
      $greetings
   <body>
</html>

这里暂且省略处理方式,在后面做专门对比讨论。

二、为什么选smarty?

php来说,有很多模板引擎可供选择,比如最早的phplib template和后起之秀fast template,经过数次升级,已经相当成熟稳定。如果你对目前手中的模板引擎很满意,那么......也请往下看,相信你作为一个自由软件爱好者或者追求效率和优雅的开发者,下面的smarty介绍多少会有点意思。

除了个人偏好的影响,我一直倾向于使用官方标准的实现,比如apache的xml引擎axis。好处就是可以获得尽可能好的兼容性(比如早期mfc对于win3x的兼容性就比其它的应用程序框架好,当然现在各种版本都很完善了)。smarty发布之前我一直使用的是 pear 中的integrated template extension。这个引擎和phplib template、fast template几乎是兼容的,从模板的语法到对模板的处理同出一辙:都是将模板读入内存然后调用parse()函数,用数据对预置的标记进行替换。

下面看看smarty是怎么做的。接到request后,先判断是否第一次请求该url,如果是,将该url所需的模板文件"编译"成php脚本,然后redirect;如果不是,就是说该url的模板已经被"编译"过了,检查不需要重编译后可以马上redirect,重编译条件可以自己设定为固定时限,默认的是模板文件被修改。  

怎么样,看起来是不是有点眼熟?想起来了──这不就是jsp的原理嘛!的确,这种"编译"用在php这样的解释性脚本引擎上显得匪夷所思,但是仔细想想,java不也是由jvm解释执行的吗?这就叫"没有做不到,只有想不到"。

既然谈到了java,就再对php的未来发表一点看法。php官方网站上宣布了要在2003年年底发布php5.0版。这个版本拥有很多崭新的特性:比如异常处理,命名空间,更加面向对象等等。可以说越来越向java靠拢,smarty也是新特性之一,使得php更适用于大中型项目的开发。但是似乎离我当初选择它的原因──灵巧易用──越来越远了。但就一个软件的生存周期来看,php正处在成长期,开发者赋予它更多的功能,以期能胜任商业应用是利大于弊的。作为php的忠实用户,肯定不希望php总是被人指责"能力不足"吧?

为什么选择smarty,仅仅因为它很像jsp?当然有更为充分的理由。首先,除了第一次编译的成本比较高之外,只要不修改模板文件,编译好的cache脚本就随时可用,省去了大量的parse()时间;其次smarty像php一样有丰富的函数库,从统计字数到自动缩进、文字环绕以及正则表达式都可以直接使用;如果觉得不够,比如需要数据结果集分页显示的功能,smarty还有很强的扩展能力,可以通过插件的形式进行扩充。

事实胜于雄辩。我设计了一个测试程序,通过速度和开发难度这两个因素对比了一下smarty和phplib template,选phplib template的原因是在patrick的文章 《在php世界中选择最合适的模板》中有一个phplib template对fast template的竞赛,结果phplib template大获全胜,这使得smarty有了一个很好的对手。在测试之前,先谈一下在安装过程中需要注意的问题。

出处:www-128ibm.com
责任编辑:moby

上一页 下一页 [php]模板引擎smarty介绍 [2]

◎进入论坛网络编程版块参加讨论

idea.com" method=get style="margin:0px; padding:0px;">idea.com">idea.com/img/google_search_title.gif;s:http://www.blueidea.com;forid:1;">
全网 idea.com';this.form.bisearch.value='cms';form.searchby.style.display='';document.getelementbyid('keyword').style.width='70px';">本站 idea.com';this.form.bisearch.value='bbs';form.searchby.style.display='none';document.getelementbyid('keyword').style.width='132px';">论坛
热门搜索:css fireworks 设计比赛 网页制作 dreamweaver studio8 flash
站点最新 站点最新列表
保持清晰的文档结构
月亮图腾教程ⅴ—最后一战
x-sapce使用系列教程
x-space安装系列教程
抽线以及虚线画法简明教程
创新设计 百万格子大楼
discuz!转换系列教程
世界杯足球的32个变种
易上手简单图层样式扣图
一封写给mm学习linux的信
栏目最新 栏目最新列表
保持清晰的文档结构
月亮图腾教程ⅴ—最后一战
x-sapce使用系列教程
x-space安装系列教程
抽线以及虚线画法简明教程
discuz!转换系列教程
易上手简单图层样式扣图
十分钟学会 xajax
css 菜单举一反三
利用照片制作版画简明教程
>> 分页 首页 前页 后页 尾页 页次:1/21个记录/页 转到 页 共2个记录

蓝色理想版权申明:除部分特别声明不要转载,或者授权我站独家播发的文章外,大家可以自由转载我站点的原创文章,但原作者和来自我站的链接必须保留(非我站原创的,按照原来自一节,自行链接)。文章版权归我站和作者共有。

转载要求:转载之图片、文件,链接请不要盗链到本站,且不准打上各自站点的水印,亦不能抹去我站点水印。

特别注意:本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

本文暂时没有评论和评分

asp" method="post" onsubmit="submit.disabled=true;">
您的评论
用户名:  口令:
说明:输入正确的用户名和密码才能参与评论。如果您不是本站会员,你可以注册 为本站会员。
注意:文章中的链接、内容等需要修改的错误,请用报告错误,以利文档及时修改。
不评分12345
注意:请不要在评论中含与内容无关的广告链接,违者封id
请您注意:
·不良评论请用报告管理员,以利管理员及时删除。
·尊重网上道德,遵守中华人民共和国的各项有关法律法规
·承担一切因您的行为而直接或间接导致的民事或刑事法律责任
·本站评论管理人员有权保留或删除其管辖评论中的任意内容
·您在本站发表的作品,本站有权在网站内转载或引用
·参与本评论即表明您已经阅读并接受上述条款
推荐文档 打印文档 评论文档 报告错误  
专业书推荐 更多内容
flash第一步系列》
《交互设计之路》
dreamweaver 从基础到实践》
《色彩管理》
网页设计专家门诊》
《情感化设计》
gui设计禁忌》
html>


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons