主要思想來(lái)自:http://www.phpobject.net/b...[url=http://www.phpobject.net/blog/read.php?49][/url]

這里就不多解釋原理了,直接發(fā)代碼。

PS:這里代碼是不能直接使用的,必須結(jié) " /> 久久视频这有精品63在线国产,国产偷国产偷亚州清高,色欲午夜无码久久久久久

天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

自己前幾天寫的無(wú)限分類類

前一周寫的吧,使用中效果還不錯(cuò)。

 主要思想來(lái)自:http://www.phpobject.NET/b...[url=http://www.phpobject.NET/blog/read.php?49][/url]

  這里就不多解釋原理了,直接發(fā)代碼。

  PS:這里代碼是不能直接使用的,必須結(jié)合我的一些其他庫(kù)類。應(yīng)該說(shuō)思想才是最重要的,這里主要提供一種分類的思路。
復(fù)制代碼 代碼如下:
<? 
/** 
--  
-- 表的結(jié)構(gòu) `daxue8_category` 
--  

CREATE TABLE `daxue8_category` ( 
  `cid` smallint(6) NOT NULL auto_increment, 
  `pid` smallint(6) NOT NULL default '0', 
  `level` smallint(6) NOT NULL default '0', 
  `cname` char(64) NOT NULL default '', 
  `lft` smallint(6) NOT NULL default '0', 
  `rgt` smallint(6) NOT NULL default '0', 
  `uid` mediumint(8) NOT NULL default '0', 
  `username` char(32) NOT NULL default '', 
  `ctime` int(10) NOT NULL default '0', 
  `cstate` tinyint(1) NOT NULL default '0', 
  `gnum` mediumint(8) NOT NULL default '0', 
  `orderstyle` smallint(3) NOT NULL default '0', 
  PRIMARY KEY  (`cid`) 
) TYPE=MyISAM AUTO_INCREMENT=2 ; 

--  
-- 導(dǎo)出表中的數(shù)據(jù) `daxue8_category` 
--  

INSERT INTO `daxue8_category` VALUES (1, 0, 1, 'root', 1, 2, 0, '管理員', 1163608814, 1, 0, 0); 
*/ 
class category 

    var $module; 

    var $tbname; 

    function category() 
    { 
        $this->tbname=TB_PREX.'_category'; 
        $this->module=new module($this->tbname); 
    } 

    /** 
      * 增加子節(jié)點(diǎn) 
      * @param array $node 待增加子節(jié)點(diǎn)的屬性 
      * @param int $pid 父節(jié)點(diǎn)的ID 
    */ 
    function add($node,$pid){ 
        //檢查是否已經(jīng)存在該節(jié)點(diǎn) 
        if($node_exist=$this->module->detail('where pid='.$pid.' and cname=/''.$node['cname'].'/'')){ 
            //$this->error(__FUNCTION__.'():該節(jié)點(diǎn)'.$node['cname'].'已經(jīng)存在!'); 
            //print_r($node_exist); 
            return $node_exist['cid']; 
        } 
        //獲取父節(jié)點(diǎn)信息 
        $pnode=$this->get_by_cid($pid); 
        //更新其他節(jié)點(diǎn) 
        $this->module->query('update `'.$this->tbname.'` set lft=lft+2 where lft>'.$pnode['rgt']); 
        $this->module->query('update `'.$this->tbname.'` set rgt=rgt+2 where rgt>='.$pnode['rgt']); 
        //插入新節(jié)點(diǎn) 
        $node['pid']=$pid; 
        $node['lft']=$pnode['rgt']; 
        $node['rgt']=$pnode['rgt']+1; 
        $node['level']=$pnode['level']+1;//層次加一 
        return $this->module->add($node); 
    } 

    /** 
      * 刪除節(jié)點(diǎn) 
      * @param $cid 待刪除的節(jié)點(diǎn)的ID 
      * @param $delete_childern 如果該節(jié)點(diǎn)存在子節(jié)點(diǎn),是否強(qiáng)制刪除。設(shè)置未true,則當(dāng)存在子節(jié)點(diǎn)的時(shí)候,刪除失敗,返回false 
      * 
    */ 
    function delete($cid,$delete_childern=false) 
    { 
        //獲取節(jié)點(diǎn)信息 
        $node=$this->get_by_cid($cid); 
        if(($this->child_num($node)>0)&&(!$delete_childern))$this->error(__FUNCTION__.'():該節(jié)點(diǎn)存在子節(jié)點(diǎn)!'); 
        //刪除該節(jié)點(diǎn)及其所有子節(jié)點(diǎn) 
        $this->module->delete('where lft between '.$node['lft'].' and '.$node['rgt']); 
        //修改相應(yīng)的左右鍵值 
        $plus=$node['rgt']-$node['lft']+1; 
        $this->module->query('update `'.$this->tbname.'` set lft=lft-'.$plus.' where lft>'.$node['rgt']); 
        $this->module->query('update `'.$this->tbname.'` set rgt=rgt-'.$plus.' where rgt>'.$node['rgt']); 
        return true; 
    } 

    /** 
      * 更新一個(gè)節(jié)點(diǎn) 
      * @param array $set更新集 
      * @param int $cid 更新的節(jié)點(diǎn)的主鍵ID 
    */ 
    function update($set,$cid){ 
        return $this->module->update($set,'where cid='.$cid); 
    } 

    /** 
      * 選取節(jié)點(diǎn)及其子節(jié)點(diǎn) 
      * @param int $cid節(jié)點(diǎn)的主鍵ID 
      * @param int $deep選取深度 
    */ 
    function select($cid,$deep=0) 
    { 
        //獲取節(jié)點(diǎn)信息 
        $node=$this->get_by_cid($cid); 
        $where='where lft between '.$node['lft'].' and '.$node['rgt']; 
        if(!empty($deep))$where.=' and level<'.$node['level']+$deep; 
        if($deep==1){ 
            $where.=' order by orderstyle desc'; 
        }else{ 
            $where.=' order by lft asc';             
        } 
        return $this->module->select($where); 
    } 

    /** 
      * 獲取父節(jié)點(diǎn)路徑 
      * @param int $cid 節(jié)點(diǎn)的ID  
    */ 
    function get_parent($cid) 
    { 
        $node=$this->get_by_cid($cid); 
        return $this->module->select('where lft<='.$node['lft'].' and rgt>='.$node['rgt'].' order by lft asc'); 
    } 
    /** 
      * 選取子節(jié)點(diǎn) 
      * @param int $cid節(jié)點(diǎn)的主鍵ID 
      * @param int $deep選取深度 
    */ 
    function get_children($pid,$deep=0){ 
        //獲取節(jié)點(diǎn)信息 
        $pnode=$this->get_by_cid($pid); 
        $where='where lft>'.$pnode['lft'].' and rgt<'.$pnode['rgt']; 
        if(!empty($deep))$where.=' and level<='.($pnode['level']+$deep); 
        if($deep==1){ 
            $where.=' order by orderstyle desc'; 
        }else{ 
            $where.=' order by lft asc';             
        } 
        return $this->module->select($where); 
    } 

    /** 
      * 獲取第deep層子節(jié)點(diǎn) 
      * @param int $cid節(jié)點(diǎn)的主鍵ID 
      * @param int $deep選取深度 
    */ 
    function get_level_children($pid,$deep){ 
        //獲取節(jié)點(diǎn)信息 
        $pnode=$this->get_by_cid($pid); 
        $where='where lft>'.$pnode['lft'].' and rgt<'.$pnode['rgt']; 
        $where.=' and level='.($pnode['level']+$deep); 
        $where.=' order by orderstyle desc'; 
        return $this->module->select($where); 
    } 

    /** 
      * 獲取節(jié)點(diǎn)信息 
      * @param $cid 節(jié)點(diǎn)的主鍵ID 
      * @return array $node 
    */ 
    function get_by_cid($cid){ 
        $node=$this->module->detail('where cid='.$cid); 
        if(!$node)$this->error(__FUNCTION__.'():獲取節(jié)點(diǎn)'.$cid.'失敗!'); 
        return $node; 
    } 
    /** 
      * 獲取子節(jié)點(diǎn)的數(shù)目 
      * @param array $node 節(jié)點(diǎn)信息 
      * @return num 
    */ 
    function child_num($node){ 
        return ($node['rgt']-$node['lft']-1)/2; 
    } 
    /** 
      * 按照層次顯示分類 
      * @param int $cid節(jié)點(diǎn)的主鍵ID 
      * @output 
    */ 
    function display($cid) 
    { 
        $nodes=$this->select($cid); 
        foreach($nodes as $node){ 
            echo str_repeat('   ',$node['level']-1).$node['cname']."/n"; 
        } 
    } 
/*-------private-----------------------------------*/ 

    function error($msg){ 
        die('ERROR : file '.__FILE__.' function '.$msg); 
    } 

?> 

php技術(shù)自己前幾天寫的無(wú)限分類類,轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 被肉日常np高h | 起碰免费公开97在线视频 | 18video性欧美19sex高清 | 欧洲内射XXX高清 | H揉捏娇喘乳叫床NP调教视频 | 日韩AV无码一区二区三区不卡毛片 | 两个人的视频hd全免费 | 一本久道久久综合婷婷五月 | 国产 亚洲 日韩 欧美 在线观看 | 香蕉59tv视频 | 日美欧韩一区二去三区 | 动漫美女无衣 | 亚洲日韩在线天堂一 | 国产乱辈通伦影片在线播放亚洲 | 国产亚洲欧美ai在线看片 | 4438全国免费观看 | 蜜臀AV中文字幕熟女人妻 | 加勒比一本之道高清视频在线观看 | 色欲久久99精品久久久久久AV | 超级碰碰青草久热国产 | 妇少水多18P蜜泬17P亚洲乱 | 青青久 | 男女交性视频无遮挡全过程 | 99国产精品人妻无码免费 | 国产精品成人自拍 | 久久中文字幕乱码免费 | 男生插曲女生身全过程 | 亚洲视频 在线观看 | 亚洲 综合 欧美在线视频 | 色戒无删减流畅完整版 | 热久久综合这里只有精品电影 | 麻豆精品人妻一区二区三区蜜桃 | 中文在线无码高潮潮喷在线 | 韩国黄色影院 | 乱淫67194| 午夜婷婷一夜七次郎 | 久久成人永久免费播放 | 色婷婷亚洲五月 | 快穿女主有名器的H纯肉黄暴拉文 | 亚洲女人毛片 | 在线精品视频成人网 |