我是一个新手,学php陆续也有一段时间了,近来想自己做个论坛,给我印象最深的论坛是凯利,那里的回复做得很不错,后来我就想是怎么做的,据说是用递归算法实现的,上这里来也没有找到,让后我就自己写了一遍花了不少的心思!
不是为了空间我才不贴出来呢! 说明:这只是一个递归显示的程序,里面还确定了没页显示30个主题
参数是pages当前页数,$b回复的指针 数据机构为: id name title
time//发表时间 re_times//阅读次数 follow//跟随的主题
text//文本内容,显示title主页面是没有用到 设计思想: follow为跟随主题贴的id 譬如
id title follow
1 a 0
18 b 1
大家一定猜到了,第一贴是主题,而第18贴为第1贴的子贴!
好了!大家可以看一下我的递归函数了,我目前还没有找到能放php+mysql
的空间,所以效果请大家去bbs.kali.com.cn一看究竟! 当然还有不足,我们下回讨论吧!
请大家多提宝贵意见阿!! function display($pages=0,$b=0){
static $CurrentGrade=0;
static $PrevGrade=-1;
$NumControll=0;
if(!$obj)
{$obj=new Member_r;
$data=$obj->connect();
}else{}
$result=mysql_query("select * from text where follow='$b' order by time desc ",$data);
$row=mysql_num_rows($result);
if($row)//如果当前的follow留言!
{ if($CurrentGrade)//当次留言是回复时!修改当次循环的前层指针
{$PrevGrade++;}
else{}
}elseif($PrevGrade==-1){$CurrentGrade=0;return;}
else{++$PrevGrade;$CurrentGrade=$PrevGrade;return;}
$offset=$pages*30;
mysql_data_seek($result,$offset);
while(($temp=mysql_fetch_array($result))&&($NumControll<30))
{
$time=date("Y-m-j G:I:s",$temp["time"]);
echo "<tr bgcolor=#DDDFB5>";
printf("<td width=150 border=0 height=1><img src=\"images/space.gif\" width=%d height=1><font size=2>%s</font></td>",$CurrentGrade*15,$temp["name"]);
printf("<td width=350 border=0 height=1><font size=2><a href=\"text.php?id=%s\" target=_blank>%s</a></font></td>",$temp["id"],$temp["title"]);
printf("<td width=200 border=0 height=1><font size='2'>%s</font></td>",$time);
printf("<td width=100 border=0 height=1><font size='2'>%d</font></td>",($temp["re_times"]));
echo "</tr>";
display(0,$temp["id"],++$CurrentGrade);//检查当前层的下一层是否有回复!
$PrevGrade=$CurrentGrade-1;
++$NumControll;
}
$CurrentGrade=$CurrentGrade-1;
return $temp["id"];//第当前层再无回复,重置排列!并顺利返回
}//显示页面信息,同时控制回复!
|
|