具有树状结构的文本论坛(五)——主题显示

    主题显示实现文件listtree.php在用户点击任何一个主题链接的时候被包含进来。下面就是listtree.php文件的代码
<? 
    
echo "<body bgcolor='#FFF0F0'>";
    if(!
file_exists("rec/".$id))
    {
        echo 
"该主题不存在,可能已经被删除";
        return;
    }
    
    echo 
"<div align='center'><b><I><font color='#008000' size=+3>主题:$title </font></I></div>";
    echo 
"<div align=right>";
    echo 
"共有".$notes."个帖子&nbsp;";
    echo 
"<a href=forum.php?action=addnew title='创建新的主题'>加新主题</a>&nbsp;";
    echo 
"<a href=forum.php?action=themelist title='返回主题列表'>主题列表</a>";
    echo 
"&nbsp;&nbsp;&nbsp;&nbsp;</b></div>";
   
    
$list file("rec/".$id);
    
    function 
mysort($a$b)
    {
      
$a_id strtok($a,"t");
      
$b_id strtok($b,"t");
      if(
strcmp($a_id$b_id) == 0)
        return 
0;
      return (
strcmp($a_id$b_id) < 0)? -1;
    }
    
usort($listmysort);
        
    for(
$i 0$i count($list); $i ++)    //依次列出各个帖子内容
    
{   
        
$noteid strtok($list[$i],"t");
         
$theme strtok("t");
         
$face strtok("t");
         if(
intval($face) < 10)
         
$face "0".$face;
         
$face ="img/face".$face.".png";
         
$author strtok("t");
         
$timestr strtok("t");
         
$ip strtok("t");
         
$oicq strtok("t");
         
$email strtok("t");
         
$homepage strtok("t");
         
$content strtok("t");

         
$idlen strlen($noteid);
         
         if(
$idlen == 2)
         {
           
$headcolor '#9933FF';
           
$bodycolor '#CCCCFF';      
         }            
         else if((
$idlen/2)%== 0)
         {
           
$headcolor '#990000';
           
$bodycolor '#FFCCCC';  
         }
         else
         {
           
$headcolor '#CC9000';
           
$bodycolor '#FFFFCC';      
         }
      
       for(
$j 0$j <$idlen/2$j ++)//各子帖前面插入一定的透明表格
         
{
           echo 
"<table width=56 border=0 align='left'><tr><td>&nbsp;</td></tr></table>";
         }
         if(
$idlen 2)
         {
           echo 
"<table width=53 border=0 align='left'><tr>";    
           echo 
"<img src='img/re.png' width=50 height=40>";    //插入回复箭头
           
echo "</tr></table>";
         }
                  
         if(
$idlen 20)
           
$table_width MAX_TABLE_WIDTH $idlen28;
         echo 
"<table width=$table_width border=1 cellspacing=0 rules=rows>";
      echo 
"<tr bgcolor=$headcolor><th width='70%' colspan=2>";
    echo 
"<div align='left'><font color='#FFFFFF'>";
    echo 
"&nbsp;$author&#58&nbsp;$theme";
     echo 
"</font></div></th><th align=right>";
     echo 
"<a title='发帖时间:$timestr'><img src='img/time.png' align=absmiddle></a>";    //time
     
echo "<a title=' $author 的IP是:$ip'><img src='img/ip.png' align=absmiddle></a>";    //ip
     
if($oicq != "")
       echo 
"<a title=' $author 的OICQ是:$oicq'><img src='img/oicq.png' align=absmiddle></a>";    //oicq
     
if($email != "")
       echo 
"<a href='mailto:$email' title='给 $author 发封信' ><img src='img/mail.png' border=0 align=absmiddle></a>";    //email
     
if($homepage != "")
       echo 
"<a href='$homepage' title='到 $author 的主页去看看' ><img src='img/home.png' border=0 align=absmiddle></a>";    //homepage
     
if($username == $master || $author == $username)
      echo 
"<a href='forum.php?action=edit&titleid=$id&noteid=$noteid&theme=$theme' title='修改/删除该帖子'><img src='img/edit.png' border=0 align=absmiddle></a>&nbsp;";
     echo 
"<a href='forum.php?action=reply&titleid=$id&noteid=$noteid&title=$title&theme=$theme' title='回复该帖子'><img src='img/reply.png' border=0 align=absmiddle></a>";
    echo 
"</th></tr>";
    echo 
"<tr bgcolor=$bodycolor><td width=4%>";
    echo 
"<img src=$face align=absbottom></td><td colspan=2>";    //face
    
$content str_replace("&lt;br&gt;""<br>"$content);
    
$content ubb($content);
    echo 
"<font color='#000000'>$content</font>";
    echo 
"</td></tr>";
    echo 
"</table>";
    }  
?>
    其中定义了一个数组排序函数mysort(),这是实现树状结构的关键,它实际上是把各帖子按ID字符串做升序排列。由于ID字符串在设计时有意作成小数形式,使得如此简单的操作就实现了树状排列,而且添加帖子的时候写文件操作也十分容易。
    在显示“修改/删除”操作的图形链接之前有一个条件判断if($username == $master || $author == $username),就是说,如果用户登录的名字是论坛默认的管理员名字或者用户自己就是发帖人,才有权修改/删除该帖子。
    下次将介绍该论坛的新建主题部分。(未完待续)