涩兔子 发表于 2004-11-10 19:46:54

[分享]蓝氏家族PHP template进阶学习

用PHP Template Block技术实现分层

我以前不知道像公社论坛phpbb2的论坛分那么多的类别,而且每个类别还有那么多的小区域是如何形成的>_<还以为是用html语言一点点的加入的。后来参看了PHPlib的doc文档中有关set_block的template用法才恍然大悟:原来这种树形结构,如下图:
http://www.cs.wust.edu.cn/leslie/block.jpg
是用block实现的,有点像可视化C/C++语言中TreeView控件的定义类似,提及了句柄这个概念。

先用任何可视化网页编辑工具,或者用quanta、bluefish等,甚至就用记事本编写一个名为block.htm的网页模板。


<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> </td>
    <td> </td>
    <td> </td>
</tr>
<!-- BEGIN forum_name_list -->
<tr>
    <th height="49" scope="row"><h3>{FORUM_NAME}</h3>
    <h5>{DES}</h5></th>
    <td> </td>
    <td> </td>
    <td> </td>
</tr>
<!-- END forum_name_list -->
<!-- END category_list -->
</table>
</body>
</html>

注意不要忘记写<!-- BEGIN … -->和<!-- END … -->标签,否则PHP会不知道在何处分block^_^
上面block.htm的可视化页面,如下:

http://www.cs.wust.edu.cn/leslie/htm.jpg

然后用任意文本编译器编写调用block.htm网页模板的PHP文件block.php

<?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');
?>


好了,在浏览器里输入http://localhost/.../block.php
表现的block.php页面如下:
http://www.cs.wust.edu.cn/leslie/block_php.jpg
实际上$category = array("公告","休闲");这些block中的信息都是由后台数据库提供的,所以还需要了解更多的知识才能see php forum backwards & forwards^_^

sjinny 发表于 2004-11-10 20:09:04

支持啊~~ :oops:

涩兔子 发表于 2004-11-10 20:19:10

希望能早点把PHP研究透 :mrgreen:

jiangtao9999 发表于 2004-11-11 16:17:27

我已经懒得研究了…………

涩兔子 发表于 2004-11-11 21:23:11

那就加入蓝氏家族吧,一起练练手 :mrgreen:

linuxxxyy 发表于 2004-11-12 21:15:06

cool
thanks
页: [1]
查看完整版本: [分享]蓝氏家族PHP template进阶学习