喜悦国际村 
» 游客:  注册 | 登录 | 搜索 | 统计 | 喜悦证交所 | 帮助

RSS 订阅当前论坛  

[北京]代朋友公司招聘PHP高级程序员多名

上一主题 下一主题
     
标题: Php 模板(2)  
 
cking (cking)
新手上路
Rank: 1
中级会员



UID 12254
精华 0
积分 26
帖子 26
金钱 26 喜悦币
威望 0
人脉 0
阅读权限 10
注册 2002-1-16
来自 Singapore
状态 离线
Php 模板(2)

希望hkfuk 能够挂顶
欢迎大家访问 SRPBoard http://bbs.srpboard.org

5.2 模板设计

情况1:基本变量替换

变量替换也就是把模板中类似{xxx}的部分替换成对应的数据。
我们举一个很简单的例子来说明。

以下模板来源于template-1/blk_forum1,它用于显示分论坛信息。

<tr>
<td><a href=forum.php?forumid={forum_id} target=_blank><img src=icon/type{type}.gif></a></td>
<td>{forum_infor}</td>
<td>{moderators}</td>
<td>{topic_no}</td>
<td>{reply_no}</td>
<td>{newtopic}</td>
<td><span style="CURSOR: hand" onClick="window.external.AddFavorite
('{board_root}forum.php?forumid={forum_id}','{ctg_name}
- 『{forum_name}』')"><IMG SRC="icon/fav1.gif"
ALT="将『 {forum_name} 』添加到收藏夹"></span></td>
</tr>

PHP程序处理此段代码的时候,程序会从数据库中读取论坛信息。假定PHP从数据空中读取的信息如下:论坛ID 1,论坛名称 官方资讯,主题数 16, 回复数 158等等。PHP程序会将模板里所有的{forum_id}(2个)替换成1,所有的{forum_name}(2个)替换成"官方资讯",所有的{topic_no}替换为16,所有的{reply_no}替换为158。其它的变量同样处理

情况2:块处理

所有的块都有这样的结构
<!-- BEGIN xxx -->
……
<!-- END xxx -->

一点注释:作为HTML设计人员,应该了解 <!-- --> 这是HTML语言中的注释符。打开浏览器浏览时,是不会被显示的。

PHP程序处理块的时候,会把块从原来的模板中解析出来,原来的块在模板中会被替换成一个变量。需要说明的是,块中会包含别的变量。处理块的程序在写的时候,并不清楚即将会产生多少块的拷贝,这一切都是动态的。程序运行的时候,会根据数据库中的数据决定拷贝的数目,然后逐次解析每个拷贝 -- 替换块中的变量,所有这些拷贝将会被顺次连接在一起。最终解析完成的时候,这些被链接后的拷贝将会被用来替换上文中替换原模板中块的变量。

以上片段可能是比较复杂难懂。但是作为HTML设计者,勿须理解程序处理的过程,只需要知道什么地方改需要使用块,以及如何使用块就足够了。但是,当然如果懂得块的处理机制,对HTML设计会有很大帮助,以至使得HTML设计获得极大的灵活性。

以下模板来自于template-1/pm2,但这是其中的片断,对于理解如何使用块足够了。

<tr>
<td bgcolor=#c8e4ff align=center><b>发件人</b></td>
<td bgcolor=#c8e4ff align=center><b>主题</b></td>
<td bgcolor=#c8e4ff align=center><b>是否已读</b></td>
<td bgcolor=#c8e4ff align=center><b>删除标记</b></td>
</tr>

<!-- BEGIN msg -->
<tr>
<td bgcolor=#c8e4ff align=center>{friend}</td>
<td bgcolor=#c8e4ff><a href=pm.php?mode=read&type=inbox&id={id}>
{title}</a></td>
<td bgcolor=#c8e4ff align=center><img src=icon/{status}
border=0 width=16 height=12></td>
<td bgcolor=#c8e4ff align=center><b><input type=checkbox name=msg
{no} value={id}></b>
</td>
</tr>
<!-- END msg -->

这段模板用于显示短信的收件箱,以<!-- BEGIN msg -->开始,以<!-- END msg -->结束。对于某一个注册用户而言,任何一时刻短信数目是不可确定的,可以0个,或者大于0个。对于每一封短信而言,有些东西是可变的,比如说收信时间,信件主题等等。这些东西就构成了块中的变量。对于所有类似情况应该考虑使用块。

情况3:复杂情况下的块处理

诸多情况中最复杂的情况就是块的嵌套 - 块中嵌套块。
一个简单的例子
<!-- BEGIN xxx -->
……
<!-- BEGIN xyz -->
……
<!-- END xyz -->
……
<!-- END xxx -->

PHP程序处理机制与情况2基本相同。需要注意的是,这里的嵌套是由程序本身去完成的。所不同的是,程序首先提取出块xyz,然后用变量替换块xyz。程序用相同的方法解析出块xxx。

处理数据的时候,程序首先确定块xxx重复的次数,然后按照这个次数确定程序需要进行多少次循环。对于每重循环,PHP程序按照情况2中的方法处理块xyz,以及情况1中的方法处理块xxx中的其它变量。最终在本次循环结束的时候,得到块xxx的一个拷贝。当上述次数的循环结束的时候,也就得到了处理完毕的块xxx。

上述情况最简单的两层嵌套。外层的块可以包含几个同层且并列的内嵌块。比如:

<!-- BEGIN xxx -->
……
<!-- BEGIN xyz -->
……
<!-- END xyz -->
……
<!-- BEGIN abc -->
……
<!-- END abc -->

……
<!-- END xxx -->

在这里,块xxx内就同时包含了块xyz和abc。

模板本身当然也支持多重嵌套,但是需要处理此模板PHP的积极配合。鉴于多重嵌套的复杂,也就不便在此处敖述。

下面给出一个两重嵌套的具体例子。

<!-- BEGIN ctg -->
<tr><td colspan=7> ◇ {ctg_name} ◇</td></tr>
<!-- BEGIN forum -->
<tr>
<td><a href=forum.php?forumid={forum_id}>
<img src=icon/type{type}.gif></a></td>
<td>{forum_infor}</td>
<td>{moderators}</td>
<td>{topic_no}</td>
<td>{reply_no}</td>
<td>{newtopic}</td>
<td><span style="CURSOR: hand" onClick="window.external.AddFavorite
('{board_root}forum.php?forumid={forum_id}','{ctg_name} -
『{forum_name}』')"><IMG SRC="icon/fav1.gif" ALT="将『 {forum_name} 』
添加到收藏夹"></span></td>
</tr>
<!-- END forum -->
<!-- END ctg -->

这是论坛首页显示分类/论坛的一种方法。鉴于多方面的原因,SRPBoard并未采取这种方式。最外重的嵌套就是分类的块,分类块中包含了论坛块。分类块中可以包含其它变量,比如这里的分类名称变量。

(未完待续)
2003-6-28 09:35 AM#1
查看资料  访问主页  发短消息  QQ  顶部
 
ice-hotty (ice-hotty)
版主
Rank: 7Rank: 7Rank: 7
版主



UID 16512
精华 2
积分 1504
帖子 1541
金钱 1484 喜悦币
威望 20
人脉 0
阅读权限 100
注册 2002-9-15
来自 大连
状态 离线
[推荐阅读] 如何解决提交后发生错误,返回时所有数据全部丢失?
新功能、新用法可有?
2003-6-28 12:30 PM#2
查看资料  Blog  发短消息  ICQ 状态  顶部
 
lzmol (lzmol)
中级会员
Rank: 3Rank: 3
资深会员



UID 19646
精华 0
积分 368
帖子 368
金钱 368 喜悦币
威望 0
人脉 0
阅读权限 30
注册 2003-4-16
来自 青岛
状态 离线
[推荐阅读] 上传后图片显示的要么不完整,要么质量下降,是什么原因。
顶一下
2003-6-28 01:57 PM#3
查看资料  发短消息  Yahoo!  顶部
     


  可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题 | 开通个人空间  


 




Powered by Discuz! 6.1.0  © 2001-2010 Comsenz Inc.
Processed in 0.201047 second(s), 6 queries

(冀ICP备05009913号) 管理员:sadly 邮箱/MSN: sadly@phpx.com QQ:824008(长隐) 清除 Cookies - - Archiver - WAP