收藏 分享(赏)

PHP中使用模板引擎.doc

上传人:fmgc7290 文档编号:4406582 上传时间:2018-12-27 格式:DOC 页数:7 大小:42.50KB
下载 相关 举报
PHP中使用模板引擎.doc_第1页
第1页 / 共7页
PHP中使用模板引擎.doc_第2页
第2页 / 共7页
PHP中使用模板引擎.doc_第3页
第3页 / 共7页
PHP中使用模板引擎.doc_第4页
第4页 / 共7页
PHP中使用模板引擎.doc_第5页
第5页 / 共7页
点击查看更多>>
资源描述

1、PHP 中使用模板引擎一.什么是模板?使用模板引擎可以使业务逻辑与显示逻辑分开这是很欠扁但也是网上公认的说法,呃,说得很准确,但估计只有会使用模板的人才能理解其实刚开始大可以简单的理解模板为“PHP 与 HTML 代码分离的方法”。二。为什么要使用模板技术?让程序(PHP 层)与显示(HTML 层)分离可以使代码更清晰易懂,要修改程序问题就去 PHP 层找,要改显示问题就去 HTML 层改。更重要的是这样 的设计可以让不懂 PHP 的前台美工也能修改页面。如果不是很理解没关系,你只要知道这是迈向其它高级开发模式的必经之路就可以了。三。有哪些模板技术?我使用过 PHPLIB 库中的模板类,后来又

2、使用了 smarty 和 smartyLight,也试过原生的 PHP 方式实现的模板,现在大家基本上都用 smarty。PHP 方式相对来说最容易实现,学得也快,但不适合团队合作。四。smarty 广被攻击的“弱点”smarty 的语法太复杂,学它简直就是学一门新语言其实你不需要复杂的功能,它就简单得很,如果你需要它复杂的功能,那你应该感谢它!根据我的经验,刚开始用一个东西,大家都喜欢简洁精炼,但随着应用的复杂,大多会抱怨它功能不足smarty 有几百 K,它太大了,慢!其实大小与速度不成正比,smarty 有编译缓存和静态缓存机制,甚至可以局部缓存另外它的自定义插件用起来非常爽,modif

3、y,block 等,我这几天正用它的block 来输出页面组件。五。下载,配置 smarty因为我后来一直用 smarty 的简化版 smartyLight,它们的语法大部分相同但也有不同,所以没办法把我现在的代码搬出来以免出错,好吧,为了写这篇,我去下载完整版 smarty。下载 2.6.18 版的吧,最新的是 2008 的,不一定很稳定其它目录都删了,保留 libs 目录就可以了,如果为了学习可以保留 demo 目录。六。实战使用模板引擎后,PHP 代码与模板分离了,一般写一个应用都有 PHP 和 HTML 两个页面PHP 部分有三个部分组成:载入与配置、赋值、载入模板解析,其中第一部分是

4、公用的,也就是放到公共页里以后都不需要再写的。第三部分即 dispay 方法,就一行代码,所以重点在第二部分。(注:数组都分索引数组和关联数组两种来说明,索引数组即以数字为键的数组,关联数组是每个键有个字符串名称的数组,实在不理解就翻书去)A。普通变量赋值与使用.PHP 代码 header(Content-Type:text/html;charset=utf-8); require /libs/Smarty.class.php; $smarty = new Smarty; $smarty-compile_check = true; $smarty-debugging = false; /调试时

5、设为 true /以上操作通常在包含页里,也就是说和数据库链接那样的操作类似 ,写一次就行了,根本不用记 /下面是实际的代码 ,PHP 部分没啥难的,各种类型的变量 ,数组,对象统统可以用 assign 方法赋值给模板. $smarty-assign(“name”,“星野天河”); /这句是第二部分。普通的变量 $smarty-display(index.tpl); /载入模板 最后一句的 display 方法是载入默认模板目录下的 index.tpl 模板,当然可以修改默认的模板目录。假如要改到 abc 目录。(不要照抄啊,出错我不负责)PHP 代码 $smarty-template_dir

6、 = /abc/; 模板部分(本例为 index.tpl 文件)XML/HTML 代码 普通变量的使用格式 : $name 这样大括号中的内容会被上面 11 行定义的 name 值代替。使用这个你可以把网页标题,关键字,站长名字、图片路径、js 路径、网站根目录、文档根等信息都在包含页里直接赋值了(一次性操作),之后在模板里任何地方可以直接使用。路径问题也不至于错乱,修改起来也省事。B。一维索引数组的赋值与使用PHP 代码 $smarty-assign(“persons”,array(“星野天河 ”,“小蕊”,“天空”,“西”,奶瓶); 将数组丢给$persons 变量,html 中循环输出数

7、组有两种格式。第一种如下XML/HTML 代码 section name=item loop=$persons $personsitem /section section 是 smarty 的循环结构, loop 表示要循环哪个变量,这里是$persons这个变量(上面代码中赋值的数组),name 表示循环中的每一项值用什么表示,可以随便取名 的,例如叫 item,那下面就要用$personsitem表示数组中的一个项。不过我更习惯使用第二种模式foreach 循环,因为与 PHP 格式接近,容易理解,并且更重要的是省代码!效率也高些,记住下面的格式。XML/HTML 代码 foreach i

8、tem=person from=$persons $person /foreach 可以理解为把$persons 数组拆开,每一项都丢进 person 变量中,与以下 PHP代码完全一样。所以,把 section 忘了吧。PHP 代码 foreach($persons as $person) echo $person; C。一维关联数组如果是一维相关数组的话,那更简单,不需要使用循环了。PHP 代码 $smarty-assign(“user”,array(name=“星野天河”,iq=138, qq=15957674); /一维相关数组的赋值 XML/HTML 代码 一维关联数组的使用 : $

9、user.name: $user.iq $user.qq 看见了吧,简单透顶,$user.name相当于 PHP 中的$username,这点和smarty 简化版不同(我更喜欢后者的格式$usernameD.二维索引数组PHP 代码 $smarty-assign(“all”, array(array(1,2,3,4,5), array(6,7,8,9,10), array(11,12,13,14,15); XML/HTML 代码 foreach item=nums from=$all foreach item=num from=$nums $num /foreach /foreach 如果对

10、操作 PHP 数组熟练,很容易理解这种循环镶套,第一轮把$all 二维数组中的每一个元素拆到$nums 变量中,第二轮再把$nums 变量(这里是一维数组了)拆开丢进$num 变量中.E。二维关联数组的使用PHP 部分PHP 代码 $smarty-assign(“guests”, array( array(“title” = “第一条留言的标题 ”, “content”= “第一条标题的内容”, “author” = “留言者小蕊”), array(“title” = “第二条留言”, “content” = “今天带笔了,要签名的排队”, “author” = “星野大叔”) ); 实际的应

11、用中,这个二维数组通常是数据库输出结果,所以为了模板使用方便,用 db 类吧,直接输出数组的那种.赶紧扔了那种wliel($row=mysql_fetch_assoc($rs) /一堆操作 使用数据库的方式.回归正题,看一下模板里怎么用二维关联数组吧.这回我不说累赘的 section 模式了.看 foreachXML/HTML 代码 foreach item=guest from=$guests $guest.title $guest.content 留言者 :$guest.author /foreach 应该能够理解,将二维数组中的每一个元素(通常是数据库中的每一条记录)扔进guest 变量

12、中,这个变量就是一维相关数组了,使用方式与一维相关数组完全相同.F.三维,四维二维及其以上的数组都分不清是索引还是关联数组了,很可能是混合型的,但都是以以一维数组的方式为基的,只要理解数组的每一维属于哪种,用正常的方法解开(以上两种方式之一)一层一层解开就行了,不要看到 N 维数组就头痛。呃说了一大堆,发现我只说数组,没有说对象如何使用,这是因为我大多用数组的关系,对象的循环与数组一样,只不过内部的使用格式不同罢了,可能 $item.id变成$item-id这样子,因为很少用对象模式输出数据库内容,又一直用 smartyLight,所以 smarty 的 记不清了,但要使用的时候上百度,一分钟

13、内就能找到答案。附:一般默认配置就可以使用了,但要更好的使用可能需要改一下配置。PHP 代码 $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 = right_delimiter = ; template_dir 是模板目录,compile_di

14、r 是编译目录(不理解没关系,但必须有这个目录),最后两个是模板中使用变量的包含符,可以不用大括号以避开与js 的冲突。这是因为 js 中有大括号不过我还是喜欢用大括号做包含符,因为简单与习惯,也有办法避开 js 冲突。例如XML/HTML 代码 literal function abc() /包含在 literal中的代码不会被模板引擎解析,所以 js 中的大括号就与模板的大括号无关了。 /literal 要注意只有在 js 中有大括号的时候才需要用 literal 包含,如果只是外链的js 就不需要了,因为没有大括号。js 的冲突与解决方法同样适合于 css 代码。改模板包含符还是使用 l

15、iteral 看你喜好了总结:其实用 smarty 还是很简单的,只不过把使用变量的方式改一下、再用 DB 类直接输出数组代替原来的过程式写法(如果不这么做,使用 smarty 会比较麻烦),重点就是记格式了,理解上没有难点。附带说个非常有用的功能XML/HTML 代码 include file=“header.tpl” title=foo 在模板中可以用这个加载其它模板,而且你赋值的变量,在载入页 (header.tpl)中仍然可以使用,不像 phplib 模板类那样还要再赋值。后面带的参数任意,title=foo 表示在 header.tpl 页 中,$title 变量值改为 foo,这很有用,因为头文件中,通常标题,关键字,css 文件路径要重新定义的。之后的进阶功能还有很多,不过做为入门教程,这里写的已经可以打发一段时间了,高级功能嘛,有朋友问的时候再写,俺一向比较懒

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 网络科技 > PHP资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报