主题显示实现文件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."个帖子 ";
echo "<a href=forum.php?action=addnew title='创建新的主题'>加新主题</a> "; echo "<a href=forum.php?action=themelist title='返回主题列表'>主题列表</a>"; echo " </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 : 1;
}
usort($list, mysort);
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)%2 == 0)
{
$headcolor = '#990000';
$bodycolor = '#FFCCCC';
}
else
{
$headcolor = '#CC9000';
$bodycolor = '#FFFFCC';
}
for($j = 0; $j <$idlen/2 - 2; $j ++)//各子帖前面插入一定的透明表格
{
echo "<table width=56 border=0 align='left'><tr><td> </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 - $idlen* 28;
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 " $author: $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¬eid=$noteid&theme=$theme' title='修改/删除该帖子'><img src='img/edit.png' border=0 align=absmiddle></a> ";
echo "<a href='forum.php?action=reply&titleid=$id¬eid=$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("<br>", "<br>", $content); $content = ubb($content); echo "<font color='#000000'>$content</font>"; echo "</td></tr>";
echo "</table>";
} ?>
其中定义了一个数组排序函数mysort(),这是实现树状结构的关键,它实际上是把各帖子按ID字符串做升序排列。由于ID字符串在设计时有意作成小数形式,使得如此简单的操作就实现了树状排列,而且添加帖子的时候写文件操作也十分容易。
在显示“修改/删除”操作的图形链接之前有一个条件判断if($username == $master || $author == $username),就是说,如果用户登录的名字是论坛默认的管理员名字或者用户自己就是发帖人,才有权修改/删除该帖子。
下次将介绍该论坛的新建主题部分。(未完待续)
|
|