|
用PHP Template Block技术实现分层
我以前不知道像公社论坛phpbb2的论坛分那么多的类别,而且每个类别还有那么多的小区域是如何形成的>_<还以为是用html语言一点点的加入的。后来参看了PHPlib的doc文档中有关set_block的template用法才恍然大悟:原来这种树形结构,如下图:
是用block实现的,有点像可视化C/C++语言中TreeView控件的定义类似,提及了句柄这个概念。
先用任何可视化网页编辑工具,或者用quanta、bluefish等,甚至就用记事本编写一个名为block.htm的网页模板。
[code:1]
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>{SITENAME}</title>
</head>
<body>
<table width="100%" border="1">
<tr>
<th scope="row"><div align="center">
<h1>{FORUM}</h1>
</div></th>
<td> <div align="center">
<h1>{TOPICS} </h1>
</div></td>
<td> <div align="center">
<h1>{POSTS} </h1>
</div></td>
<td><div align="center">
<h1>{LAST_POST}</h1>
</div></td>
</tr>
<!-- BEGIN category_list -->
<tr>
<th height="28" scope="row"><div align="left">
<h2>{CATEGORY}</h2>
</div></th>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<!-- BEGIN forum_name_list -->
<tr>
<th height="49" scope="row"><h3>{FORUM_NAME}</h3>
<h5>{DES}</h5></th>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<!-- END forum_name_list -->
<!-- END category_list -->
</table>
</body>
</html>
[/code:1]
注意不要忘记写<!-- BEGIN … -->和<!-- END … -->标签,否则PHP会不知道在何处分block^_^
上面block.htm的可视化页面,如下:
然后用任意文本编译器编写调用block.htm网页模板的PHP文件block.php
[code:1]
<?php
/*在根文件夹下创建includes文件夹,把下载来的PHPlib/php里的template.inc
copy + paste到其中*/
include('./includes/template.inc');
/*在根文件夹下创建templates文件夹,把上面编写的block.htm模板放在templates文件夹中*/
$template = new Template('./templates');
$category = array("公告","休闲");
$forum_name = array(array("最新消息","处罚通知"),array("音乐","贴图","灌水"));
$des = array(array("公布论坛最新消息","体现违规用户的ID号"),array("流行音乐","蓝氏家族的片片","水园养大的孩子"));
$template->set_file(array(
'body' => 'block.htm'
)
);
/*设置block*/
$template->set_block('body','category_list','c');//第一层block的句柄是body(template的输出句柄)
$template->set_block('category_list','forum_name_list','f');//第二层block的句柄是category_list(第一层的block)
$template->set_block('category_list','des_list','d');//第二层block的句柄是category_list(第一层的block)
for($i=0;$i<count($category);$i++){
/*清空第二层block的值,屏蔽掉此句的结构请自己尝试*/
$template->set_var('f');
$template->set_var(array(
'CATEGORY' => $category[$i]
)
);
for($j=0;$j<count($forum_name[$i]);$j++){
$template->set_var(array(
'FORUM_NAME' => $forum_name[$i][$j],
'DES' => $des[$i][$j]
)
);
$template->parse('f','forum_name_list',true);
}
$template->parse('c','category_list',true);
$template->parse('d','des_list',true);
}
$template->set_var(array(
'SITENAME' => "涩兔子block测试",
'FORUM' => "论坛",
'TOPICS' => "话题",
'POSTS' => "发言",
'LAST_POST' => "最后回复"
)
);
$template->pparse('output','body');
?>
[/code:1]
好了,在浏览器里输入http://localhost/.../block.php
表现的block.php页面如下:
实际上$category = array("公告","休闲");这些block中的信息都是由后台数据库提供的,所以还需要了解更多的知识才能see php forum backwards & forwards^_^ |
|