最近模仿php100视频的新闻系统,其中有个新闻分类,视频中提到了无限分类,但是不知道为什么没有实施,可能是为了代码简化吧。通过研究,我自己设计了这个类!先看效果图:
是以树的形式做的,看起来还不错吧!
下面数据库的设计,同表外键引用以实现单表无限分类:
下面是经过改良后但不完美的代码:
代码
//无限分类:首次初始
function classViewFirst ($table) {
$imgUp="<img src='../admin/images/1.png' height='15' width='15' />";
$imgCenter="<img src='../admin/images/2.png' height='15' width='15' />";
$imgSkin="<img src='../admin/images/3.png' height='15' width='15' />";
$imgFile="<img src='../admin/images/file.png' height='15' width='15' />";
$query=$this->query("select * from $table where f_id=0 ");
$num=mysql_num_rows($query);
$count=0;
while ($row2=mysql_fetch_array($query))
{
$count+=1;
if($count== $num)
{
echo $imgUp. $imgFile ."<span id=$row3[id]>".$row2[name]."</span><br>";
}else
{
echo $imgCenter. $imgFile ."<span id=$row3[id]>".$row2[name]."</span><br>";
}
$this->classView($row2[id], $imgSkin." ");
}
}
//递归无限
function classView ($fid,$strClass) {
$imgUp="<img src='../admin/images/1.png' height='15' width='15' />";
$imgCenter="<img src='../admin/images/2.png' height='15' width='15' />";
$imgSkin="<img src='../admin/images/3.png' height='15' width='15' />";
$imgFile="<img src='../admin/images/file.png' height='15' width='15' />";
//$strClass.=$imgSkin." ";
$query2=$this->query("select * from p_newsclass where f_id=$fid ");
$num=mysql_num_rows($query2);
$count=0;
while ($row3=mysql_fetch_array($query2))
{
$count+=1;
if($count== $num)
{
echo $strClass.$imgUp. $imgFile ."<span id=$row3[id]>".$row3[name]."</span><br>";
$this->classView($row3[id],$strClass." ");
}else
{
echo $strClass.$imgCenter. $imgFile ."<span id=$row3[id]>".$row3[name]."</span><br>";
$this->classView($row3[id],$strClass.$imgSkin." ");
}
}
}
//完成
刚开始是这样的:
后来通过不同情况下生成占位字符串的处理,终于把那个竖线干掉了。
虽然不是特别好(左右查询的处理方法可以提高效率),但介于学习PHP而不是数据库算法的需求,勉强勉强啦,比ASP的执行效率要高。

浙公网安备 33010602011771号