QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 3736|回复: 5

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

[复制链接]
发表于 2004-11-10 19:46:54 | 显示全部楼层 |阅读模式
用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> </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>
[/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^_^
发表于 2004-11-10 20:09:04 | 显示全部楼层
支持啊~~
回复

使用道具 举报

 楼主| 发表于 2004-11-10 20:19:10 | 显示全部楼层
希望能早点把PHP研究透
回复

使用道具 举报

发表于 2004-11-11 16:17:27 | 显示全部楼层
我已经懒得研究了…………
回复

使用道具 举报

 楼主| 发表于 2004-11-11 21:23:11 | 显示全部楼层
那就加入蓝氏家族吧,一起练练手
回复

使用道具 举报

发表于 2004-11-12 21:15:06 | 显示全部楼层
cool
thanks
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-16 16:18 , Processed in 0.087496 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表