您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > php之smarty入门(不要分)
菜鸟学PHP之Smarty入门(组图)~ 刚开始接触模版引擎的PHP设计师,听到Smarty时,都会觉得很难。其实笔者也不例外,碰都不敢碰一下。但是后来在剖析XOOPS的程序架构时,开始发现Smarty其实并不难。只要将Smarty基础功练好,在一般应用上就已经相当足够了。当然基础能打好,后面的进阶应用也就不用怕了。 这篇文章的主要用意并非要深入探讨Smarty的使用,这在官方使用说明中都已经写得很完整了。笔者仅在此写下一些自己使用上的心得,让想要了解Smarty却不得其门而入的朋友,可以从中得到一些启示。就因为这篇文章的内容不是非常深入,会使用Smarty的朋友们可能会觉得简单了点。 目前本文已经第三次修订了,本想多加一些料进来;不过碍于时间的关系,很多Smarty的进阶技巧笔者并没有研究得很透彻,所以也不敢拿出来现眼,但笔者相信这篇文章应该能够满足大多数想学习Smarty的初学者了。当然本文有谬误的地方也欢迎告知,笔者会在下一次的修订中更正的。 Smarty介绍 什么是模版引擎 不知道从什么时候开始,有人开始对HTML内嵌入ServerScript觉得不太满意。然而不论是微软的ASP或是开放源码的PHP,都是属于内嵌ServerScript的网页伺服端语言。因此也就有人想到,如果能把程序应用逻辑(或称商业应用逻辑)与网页呈现(Layout)逻辑分离的话,是不是会比较好呢? 其实这个问题早就存在已久,从交互式网页开始风行时,不论是ASP或是PHP的使用者都是身兼程序开发者与视觉设计师两种身份。可是通常这些使用者不是程序强就是美工强,如果要两者同时兼顾,那可得死掉不少脑细胞... 所以模版引擎就应运而生啦!模版引擎的目的,就是要达到上述提到的逻辑分离的功能。它能让程序开发者专注于资料的控制或是功能的达成;而视觉设计师则可专注于网页排版,让网页看起来更具有专业感!因此模版引擎很适合公司的网站开发团队使用,使每个人都能发挥其专长! 就笔者接触过的模版引擎来说,依资料呈现方式大概分成:需搭配程序处理的模版引擎和完全由模版本身自行决定的模版引擎两种形式。 在需搭配程序处理的模版引擎中,程序开发者必须要负责变量的呈现逻辑,也就是说他必须把变量的内容在输出到模版前先处理好,才能做assign的工作。换句话说,程序开发者还是得多写一些程序来决定变量呈现的风貌。而完全由模版本身自行决定的模版引擎,它允许变量直接assign到模版中,让视觉设计师在设计模版时再决定变量要如何呈现。因此它就可能会有另一套属于自己的模版程序语法(如Smarty),以方便控制变量的呈现。但这样一来,视觉设计师也得学习如何使用模版语言。 模版引擎的运作原理,首先我们先看看以下的运行图: 一般的模版引擎(如PHPLib)都是在建立模版对象时取得要解析的模版,然后把变量套入后,透过parse()这个方法来解析模版,最后再将网页输出。 对Smarty的使用者来说,程序里也不需要做任何parse的动作了,这些Smarty自动会帮我们做。而且已经编译过的网页,如果模版没有变动的话,Smarty就自动跳过编译的动作,直接执行编译过的网页,以节省编译的时间。 使用Smarty的一些概念 在一般模版引擎中,我们常看到区域的观念,所谓区块大概都会长成这样: !--START:Blockname-- 区域内容 !--END:Blockname-- 这些区块大部份都会在PHP程序中以if或for,while来控制它们的显示状态,虽然模版看起来简洁多了,但只要一换了显示方式不同的模版,PHP程序势必要再改一次! 在Smarty中,一切以变量为主,所有的呈现逻辑都让模版自行控制。因为Smarty会有自己的模版语言,所以不管是区块是否要显示还是要重复,都是用Smarty的模版语法(if,foreach,section)搭配变量内容作呈现。这样一来感觉上好象模版变得有点复杂,但好处是只要规划得当,PHP程序一行都不必改。 由上面的说明,我们可以知道使用Smarty要掌握一个原则:将程序应用逻辑与网页呈现逻辑明确地分离。就是说PHP程序里不要有太多的HTML码。程序中只要决定好那些变量要塞到模版里,让模版自己决定该如何呈现这些变量(甚至不出现也行)。 Smarty的基础 安装Smarty 首先,我们先决定程序放置的位置。 Windows下可能会类似这样的位置:「d:\appserv\web\demo\」。 Linux下可能会类似这样的位置:「/home/jaceju/public_html/」。 到Smarty的官方网站下载最新的Smarty套件:。 解开Smarty2.6.0后,会看到很多档案,其中有个libs资料夹。在libs中应该会有3个class.php檔+1个debug.tpl+1个plugin资料夹+1个core资料夹。然后直接将libs复制到您的程序主资料夹下,再更名为class就可以了。就这样?没错!这种安装法比较简单,适合一般没有自己主机的使用者。 至于Smarty官方手册中为什么要介绍一些比较复杂的安装方式呢?基本上依照官方的方式安装,可以只在主机安装一次,然后提供给该主机下所有设计者开发不同程序时直接引用,而不会重复安装太多的Smarty复本。而笔者所提供的方式则是适合要把程序带过来移过去的程序开发者使用,这样不用烦恼主机有没有安装Smarty。 程序的资料夹设定 以笔者在Windows安装Appserv为例,程序的主资料夹是「d:\appserv\web\demo\」。安装好Smarty后,我们在主资料夹下再建立这样的资料夹: 在Linux底下,请记得将templates_c的权限变更为777。Windows下则将其只读取消。 第一个用Smarty写的小程序 我们先设定Smarty的路径,请将以下这个档案命名为main.php,并放置到主资料夹下: main.php: ?php includeclass/Smarty.class.php; define('__SITE_ROOT','d:/appserv/web/demo');//最后没有斜线 $tpl=newSmarty(); $tpl-template_dir=__SITE_ROOT./templates/; $tpl-compile_dir=__SITE_ROOT./templates_c/; $tpl-config_dir=__SITE_ROOT./configs/; $tpl-cache_dir=__SITE_ROOT./cache/; $tpl-left_delimiter='{'; $tpl-right_delimiter='}'; ? 照上面方式设定的用意在于,程序如果要移植到其它地方,只要改__SITE_ROOT就可以啦。(这里是参考XOOPS的) Smarty的模版路径设定好后,程序会依照这个路径来抓所有模版的相对位置(范例中是'd:/appserv/web/demo/templates/')。然后我们用display()这个Smarty方法来显示我们的模版。 接下来我们在templates资料夹下放置一个test.htm:(扩展名叫什么都无所谓,但便于视觉设计师开发,笔者都还是以.htm为主。) templates/test.htm: html head metahttp-equiv=Content-Typec title{$title}/title /head body {$content} /body /html 现在我们要将上面的模版显示出来,并将网页标题($title)与内容($content)更换,请将以下档案内容命名为test.php,并放置在主资料夹下: test.php: ?php requiremain.php; $tpl-assign(title,测试用的网页标题); $tpl-assign(content,测试用的网页内容); //上面两行也可以用这行代替 //$tpl-assign(array(title=测试用的网页标题,content=测试用的网页内容)); $tpl-display('test.htm'); ? 请打开浏览器,输入试试看(依您的环境决定网址),应该会看到以下的画面: 再到templates_c底下,我们会看到一个奇怪的资料夹(%%179),再点选下去也是一个奇怪的资料夹(%%1798044067),而其中有一个档案: templates_c/%%179/%%1798044067/test.htm.php: ?php/*Smartyversion2.6.0,createdon2003-12-1522:19:45compiledfromtest.htm*/? html head metahttp-equiv=Content-Typec title?phpecho$this-_tpl_vars['title'];?/title /head body ?phpecho$this-_tpl_vars['content'];? /body /html 没错,这就是Smarty编译过的档案。它将我们在模版中的变量转换成了PHP的语法来执行,下次再读取同样的内容时,Smarty就会直接抓取这个档案来执行了。 最后我们整理一下整个Smarty程序撰写步骤: Step1.加载Smarty模版引擎。 Step2.建立Smarty对象。 Step3.设定Smarty对象的参数。 Step4.在程序中处理变量后,再用Smarty的assign方法将变量置入模版里。 Step5.利用Smarty的display方法将网页秀出。 如何安排你的程序架构 上面我们看到除了Smarty所需要的资料夹外(class、configs、templates、templates_c),还有两个资料夹:includes、modules。其实这是笔者模仿XOOPS的架构所建立出来的,因为XOOPS是笔者所接触到的程序中,少数使用Smarty模版引擎的架站程序。所谓西瓜偎大边,笔者这样的程序架构虽没有XOOPS的百分之一强,但至少给人看时还有XOOPS撑腰。 includes这个资料夹主要是用来放置一些function、sql檔,这样在main.php就可以将它们引入了,如下: main.php: ?php includeclass/Smarty.class.php; define('__SITE_ROOT','d:/appserv/web/demo');//最后没有斜线 //以main.php的位置为基准 require_onceincludes/functions.php; require_onceincludes/include.php; $tpl=newSmarty(); $tpl-template_dir=__SITE_ROOT./templates/; $tpl-compile_dir=__SITE_ROOT./templates_c/; $tpl-config_dir=__SITE_ROOT./configs/; $tpl-cache_dir=__SITE_ROOT./cache/; $tpl-left_delim
本文标题:php之smarty入门(不要分)
链接地址:https://www.777doc.com/doc-4412988 .html