+ -
当前位置:首页 → 问答吧 → 发一个自已写的无限级分类

发一个自已写的无限级分类

时间:2007-07-05

来源:互联网

写的不好,多原谅.数据库就有4个字段 channelid  parentid channelname editlist最后一个字段是栏目编辑员的id列表
复制PHP内容到剪贴板
PHP代码:

<?php
class MyChannel{
/**
 * get_query执行SQL语句
 * get_menu为得到主级栏目列表,
 * get_channel递归得到各栏目的下属栏目
 * get_show将栏目信息输出
 * @param dbConnect $db
 */
    function __construct(dbConnect $db){
        $this->db = $db;
    }
    function get_menu(){
        $one = '';
        $out = array();
        $sql = "select * from channel where parentid=0 order by channelid";
        $menu = $this->get_query($sql);
        foreach ($menu as $key=>$value){
            if($value[editlist]){
                $editlist = $this->get_editlist($value[editlist]); //编辑人员名称
            }
            $query =  "select * from channel where parentid=".$value[channelid]." order by parentid";
            if($one = $this->get_query($query)){
                $out3 = $this->get_channel($one);  //查看下级栏目
                $out[] = array('channelid'=>$value[channelid],'channelname'=>$value[channelname],'editlist'=>$editlist,'child'=>$out3);
            }
        }     
        return $out;
    }
    function get_channel($channel){
        $one = ''; 
        $o = array();
         $out2 = array();
         foreach ($channel as $k=>$v){
              if($v[editlist]){
                  $editlist = $this->get_editlist($v[editlist]); //编辑人员名称
              }
             $query =  "select * from channel where parentid=".$v[channelid]." order by parentid";
             if($one = $this->get_query($query)){             
                 $out2 = $this->get_channel($one); //查看下级栏目
                 $o[] = array('channelid'=>$v[channelid],'channelname'=>$v[channelname],'editlist'=>$editlist,'child'=>$out2);
             }else{
                 $o[] = array('channelid'=>$v[channelid],'channelname'=>$v[channelname],'editlist'=>$editlist);
             }         
         }
         return $o;
    }
    function get_editlist($str){
        $editid = explode(',',$str);
        for($i=0;$i<count($editid);$i++){
            if($i!=(count($editid)-1)){
                $id .= "id=$editid[$i] or ";
            }else{
                $id .= "id=$editid[$i]";
            }
        }
        $sql = "select username from admin where $id";
        $user = $this->db->query_array($sql);
        for($i=0;$i<count($user);$i++){
            if($i!=(count($user)-1)){
               $username .= $user[$i][username].',';
            }else{
               $username .= $user[$i][username];
            }
        }
        return  $username;
    }
    function get_query($sql){
        $result = $this->db->query_array($sql);
        return $result;
    }
//    function show_menu($result,$i=0){
//        if(count($result) > 0){
//             foreach ($result as $key=>$value){        
//                 $i++;     
//                 if($value[child]){//判断有没有子分类                                     
//                     $img = "<img id = 'img".$value['channelid']."' src='./images/jia.jpg' onclick='click_catalog(".$value['channelid'].")'/>"; //显示+或-号图标,当点击时击活js函数
//                 }else{
//                     $img = "&nbsp;&nbsp;&nbsp;&nbsp;"; //没有子分类,就不显示+,-号图片,显示空格串
//                 }    
//                 if($value[child]){ 
//                     for($j=1;$j<$i;$j++){
//                         $space .= "&nbsp;&nbsp;&nbsp;&nbsp;";
//                     }
//                 }else{
//                     for($j=2;$j<$i;$j++){
//                         $space .= "&nbsp;&nbsp;&nbsp;&nbsp;";
//                     }                 
//                 }
//                 $out .= $space.$img; //先输出空图片,再输出+或-号.(当然若无子分类,也是空格串)
//                 $out .= "<a class='menu' href = 'javascript:send_id(".$value['channelid'].")'>";
//                 $out .= $value['channelname']."</a>".$value['editlist']."<br>"; //输出分类名
//                 $space = ""; //一层目录显示结束后,初始化$space
//                 if($value[child]){ //判断有否子分类                                     
//                     $hidden_div  = "style='display:none'"; //初始化风格为不显示子分类    
//                     $out .= "<div id = 'div".$value[channelid]."' ".$hidden_div.">";                                        
//                     $out .= $this->show_menu($value[child],$i); //关键部分,递归调用,显示下级目录
//                     $out .= "</div>";
//                 }   
//                 $i=0;                                                     
//             }
//        }    
//        return $out ;            
//    }     
    function insert_html($result,$j=0){
        $j++;
        for($i=1;$i<$j;$i++){
            $space .= "&nbsp;&nbsp;&nbsp;&nbsp;";
        }      
        for($i=0;$i<count($result);$i++){
            if($result[$i][child]){
                 $img = "<img id = 'img".$result[$i]['channelid']."' src='./images/jia.jpg' onclick='click_catalog(".$result[$i]['channelid'].")'/>"; //显示+或-号图标,当点击时击活js函数
                 $result[$i][html] = $space.$img; 
                 $result[$i][child]= $this->insert_html($result[$i][child],$j);                 
            
            }else{
                  $img = "<img  src='./images/jian.jpg' />"; 
                   $result[$i][html] = $space.$img; 
            }
        }
        $j=0;
        return $result;
    }
    function show($result){
        foreach ($result as $key=>$value){
            $out .= "<tr>";
            $out .= "<td  width='10%'>$value[html]</td><td  width='10%'>$value[channelid]</td><td width='40%'><div align='left'><a href='article_list.php?cid=".$value[channelid]."'>$value[channelname]</a></div></td><td><div align='left'>$value[editlist]</div></td>"; 
            $out .= "</tr>\r";                        
            if($value[child]){
                $out .= "<tr><td colspan=4><table width='100%' border=0 id = 'div".$value[channelid]."' style='display:none' cellspacing=1 bgcolor='#FFFFFF'>";
                $out .= $this->show($value[child]);
                $out .= "</table></td></tr>\r";                
            }
            
        }
       return $out;
    }
    function get_show($result){
        $out = $this->insert_html($result);
        return $this->show($out);
    }
    function __destruct(){
         unset($db);
    }
}
?>

调用:
复制PHP内容到剪贴板
PHP代码:

<?php
require_once('../global.inc.php');
$db = new dbConnect();
$channel = new MyChannel($db);
$result = $channel->get_menu();
$data = $channel->get_show($result);
echo "<table>";
echo $data;
echo "</table>";
?>

作者: keminar   发布时间: 2007-07-05

演示图

作者: keminar   发布时间: 2007-07-05

晕..写的太菜,没人顶..:')

作者: keminar   发布时间: 2007-07-07

支持你啦。。
虽然我还不太懂无限极分类,
收下,学习ing。。。

作者: kobejiang   发布时间: 2007-07-07

:lol

作者: keminar   发布时间: 2007-07-07

嘿。。路过。支持一下,我看一看。

作者: gleon   发布时间: 2007-07-08

我先个记号,下班再好好研究。

作者: learsu   发布时间: 2007-07-11



这么多人看,其实写的很不好的.哈哈.

作者: keminar   发布时间: 2007-07-11

顶你个肺!

作者: yzxh24   发布时间: 2007-07-11

我用的方法和你的差不多,
可是这样是不是调用数据库的次数太多了

作者: jingangel   发布时间: 2008-01-08