search
HomeBackend DevelopmentPHP TutorialPHP模板引擎SMARTY_PHP
PHP模板引擎SMARTY_PHPJun 01, 2016 pm 12:32 PM
phpsmartyCanenginetemplate

SMARTY

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

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


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

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

这种语言并不是我们的母语或者英语,术语叫做"模板",逻辑和表示依靠它联 系。它是结合了HTML和脚本语言特征的一种表达方式。通过这种方式,表示层 可以按照用户所希望的格式来显示经过逻辑层处理过的数据。如果你有 Windows平台下MFC的开发经验,那么一定会很熟悉Document/Document Template/View的封装,这就是一个很典型的MVC例子。对于Web应用来说,个 人认为J2EE中的EJB/servlets/JSP是最强大的,当然还有简洁优美的Structs。 另一个很有名的实现就是COM/DCOM+ASP,这个组合在我国是最多人使用 的。

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

引言:
--------------------------------------------------------------------------------




$greetings


$greetings




--------------------------------------------------------------------------------



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

二、为什么选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有了一个很好的对 手。在测试之前,先谈一下在安装过程中需要注意的问题。

三、可能遇到的问题
在SMARTY的官方网站上,有详尽的用户手册,可以选择在线HTML和PDF格式 的版本。这里就不再涉及手册上已有的内容,只是把初次使用可能遇到的问题 做个解释。

第一个问题就很要命:提示说找不到所需文件?并不是每一个人都按照 SMARTY默认目录结构来写应用的。这里需要手工指定,假设目录结构如下:


就需要在index.php里指定目录结构:
引言:
--------------------------------------------------------------------------------

$smart->template_dir = "smarty/templates/";
$smart->compile_dir = "smarty/templates_c/";
$smart->config_dir = "smarty/configs/";
$smart->cache_dir = "smarty/cache/";


--------------------------------------------------------------------------------



第一个问题解决了,紧接着就是第二个:我刚用Dreamweaver生成的漂亮模板 怎么不能用?并不是模板文件有什么问题,而是因为SMARTY默认的标记分隔 符是{},不巧的是Javascript肯定包含这个标记。好在我们可以用任意字符当作 分隔符,再加上这两句:
引言:
--------------------------------------------------------------------------------


$smart->left_delimiter = "{/";
$smart->right_delimiter = "
Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
PPT蒙版要怎么添加PPT蒙版要怎么添加Mar 20, 2024 pm 12:28 PM

关于PPT蒙版,很多人肯定对它很陌生,一般人做PPT不会将它吃透,而是凑活着可以做出来自己喜欢的就行,所以很多人都不知道PPT蒙版到底是什么意思,也不知道这个蒙版有什么作用,甚至更不知道它可以让图片变得不再那么单调,想要学习的小伙伴们快来了学习学习,为你的PPT图片上添上点吧PPT蒙版吧,让它不再单调了。那么,PPT蒙版要怎么添上呢?请往下看。1.首先我们打开PPT,选择一张空白的图片,之后右键点击【设置背景格式】,纯色选择颜色就行。2.点击【插入】,艺术字,输入字3.点击【插入】,点击【形状】

PHP电子邮件模板:定制化和个性化您的邮件内容。PHP电子邮件模板:定制化和个性化您的邮件内容。Sep 19, 2023 pm 01:21 PM

PHP电子邮件模板:定制化和个性化您的邮件内容随着电子邮件的普及和广泛应用,传统的邮件模板已经不能满足人们对个性化和定制化邮件内容的需求。现在,我们可以通过使用PHP编程语言来创建定制化和个性化的电子邮件模板。本文将为您介绍如何使用PHP来实现这一目标,并提供一些具体的代码示例。一、创建邮件模板首先,我们需要创建一个基本的邮件模板。这个模板可以是一个HTM

C++ 模板特化的影响对于函数重载和重写C++ 模板特化的影响对于函数重载和重写Apr 20, 2024 am 09:09 AM

C++模板特化影响函数重载和重写:函数重载:特化版本可提供特定类型不同的实现,从而影响编译器选择调用的函数。函数重写:派生类中的特化版本将覆盖基类中的模板函数,影响派生类对象调用函数时的行为。

引擎格局变革:三缸发动机挑战六缸和八缸统治地位引擎格局变革:三缸发动机挑战六缸和八缸统治地位Oct 08, 2023 pm 10:57 PM

10月8日消息,美国汽车市场正在经历一场引擎盖下的变革,以前备受喜爱的六缸和八缸动力发动机正逐渐失去统治地位,而三缸发动机则崭露头角。10月8日的消息显示,美国汽车市场正在经历一场引擎盖下的变革。过去备受喜爱的六缸和八缸动力发动机正在逐渐失去统治地位,而三缸发动机则开始崭露头角在大多数人的印象中,美国人钟情于大排量车型,而"美式大V8"一直是美国车的代名词。然而,根据外媒近期公布的数据,美国汽车市场的格局正在发生巨大变化,引擎盖下的战斗正愈演愈烈。据了解,在2019年之前,美

C++中的模板元编程面试常见问题C++中的模板元编程面试常见问题Aug 22, 2023 pm 03:33 PM

C++是一门广泛应用于各个领域的编程语言,其模板元编程是一种高级编程技术,可让程序员在编译时对类型和数值进行变换。在C++中,模板元编程是一个广泛讨论的话题,因此在面试中,与此相关的问题也是相当常见的。以下是一些可能会被问到的C++中的模板元编程面试常见问题。什么是模板元编程?模板元编程是一种在编译时操作类型和数值的技术。它使用模板和元函数来根据类型和值生成

如何在 OneNote 中使用模板来提高工作效率如何在 OneNote 中使用模板来提高工作效率Apr 30, 2023 am 11:31 AM

您是否知道使用模板可以提高记笔记的速度以及捕捉重要想法的效率?OneNote有一套现成的模板供您使用。最好的部分是您还可以根据需要设计模板。无论您是学生、企业战士还是从事创造性工作的自由职业者。OneNote模板可用于以适合您风格的结构和格式记录重要笔记。模板可以是记笔记过程的大纲。业余爱好者只是做笔记,专业人士则在模板的帮助下通过结构良好的笔记做笔记并从中汲取联系。让我们看看如何在OneNote中使用模板。使用默认OneNote模板第1步:按键盘上的Windows+R。键入Oneno

Flask-Bootstrap:为Flask应用程序添加模板Flask-Bootstrap:为Flask应用程序添加模板Jun 17, 2023 pm 01:38 PM

Flask-Bootstrap:为Flask应用程序添加模板Flask是一个轻量级的PythonWeb框架,它提供了一个简单而灵活的方式来构建Web应用程序。它是一款非常受欢迎的框架,但它的默认模板功能有限。要创建富有吸引力的用户界面,需使用其他框架或库。这就是Flask-Bootstrap的用武之地。Flask-Bootstrap是一个基于Twitter

实测英伟达AI游戏引擎:与NPC实时聊天,中文流畅爆了实测英伟达AI游戏引擎:与NPC实时聊天,中文流畅爆了Mar 04, 2024 am 09:40 AM

黄院士在《赛博朋克2077》里搞的智能NPC,已经飙起中文了?量子位的一手体验,亲眼见证了NPC们流利地用中英双语对话,表情动作自然,口型也能对上……如果不是眼前就有一块屏幕,真的会有种身临其境之感。今年的CES展会上,英伟达用智能引擎AvatarCloudEngine(ACE),让游戏NPC“活”了起来,引起了不小的震撼。△CES上展示的智能NPC使用ACE,游戏中的角色可以与玩家进行逼真的语音对话,同时展现出生动的表情和肢体动作,而无需提前准备剧本。亮相当时,就有育碧、腾讯、网易、米哈游等国

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
3 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Best Graphic Settings
2 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. How to Fix Audio if You Can't Hear Anyone
3 weeks agoBy尊渡假赌尊渡假赌尊渡假赌

Hot Tools

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Integrate Eclipse with SAP NetWeaver application server.

VSCode Windows 64-bit Download

VSCode Windows 64-bit Download

A free and powerful IDE editor launched by Microsoft

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)