首頁  >  文章  >  後端開發  >  一棵php的類別樹(支援無限分類)_PHP教程

一棵php的類別樹(支援無限分類)_PHP教程

WBOY
WBOY原創
2016-07-21 16:09:04794瀏覽


最近問無限分類的類樹問題比較多,所以一高興自己寫了一個,我剛寫完的,大家用用看,看看怎麼實現起來更快,更簡單,把你的樹也貼出來(要只查詢一次資料庫的)
 

這是一棵分類列表的類樹,  支援無限分類
 
一個分類下面可以同時有"包含子類的分類"和"最終分類";
 

唯一的優點是*****只需要進行一次的資料庫*****查詢.
 

樣子不是很好看,不過可以自訂修改,可以自己定義css加裡面
 

快取方面還沒有作,可以自己補上 

下面例子的目錄結構是這樣的。 
▪--Catagory.php                                                   
  ▪--images----treeopen.gif        ----treeclose.gif                 
 
▪--圖片----line.gif        🎜>
/****************tree.jsp*********************/ 
函數Expand( id){
           節點=  document.all('節點' id); 
           if(node.style.display==''){ 
              
                       document.images('img' id).src =  imgopen; 
           }其他{ 
                    
                       document.images('img' id).src =  imgclose; 
           } 
}

/****************目錄.php*********************/ 

define('CATAGORY_TREE_EXPEND_NONE',0); 
define('CATAGORY_T_3EXPf;
class  Catagory{ 
       //基礎分類資料 
           var  $Data 
       var $treePList  =  array(); 
       //自我分類對應上級類別的關係 
       var  $treeCList 這是大型分類的範本 
         * 
         *  __id__          分類的編號 
        __image__    分類前面顯示的圖片名稱  $imgOpen  or  $imgClose 
         *  __open__    分類顯示的位置 *  樣式可以依照自己的需求任意修改  ,但無法刪除現有的元素 
       */ 
       var  $blockTpl  =T 'pad > 

 
   
 "0"  width="15"  height="15"  id="img__id__">
 
     name;  
    
     __inner__ 
        
  '; 
           * 
         *  see  $blockTpl 
       */ 
      white">__name__
'; 
       /* 
         *   *  see  $blockTpl 
       */ 
       var  $currentTpl  =  '__name__'; 
"; 

       var  $imgOpen  =  'images/treeopen.gif'; 
      gLine  =  'images/line.gif';

       var  $cachFile  =  ''; 
       var  $exp  = 🎜>var $treeStr = ''; 
var $currentStr = ''; 
/*
* 默認,預設值
*
*param $data array()
*/ function Catagory(&$data){
$this-> ;_init($資料); 
}

function _init($tmpData){
$plevel = $clevel = $plevel = $clevel = $treeData = array(); foreach($tmpData as $value){
$treeData[$value['id']] = $value; 
$plevel[$value['pid']][$value['id']] = 'END'; 
$clevel[$value['id']] = $value['pid']; 
}
$this->treeData = &$treeData; 
$this ->treePList = &$plevel; 
$this->treeCList = &$clevel; 
}
/*
* 設定目錄
*
*param $cataId int 配置返回關鍵字
*/
function parseNode($cataId=0 ){
$this->結果= $this->treePList[$cataId]; 
if($this->result== null) die("類別ID 錯誤"); 
$this->treeStr = $this->_doNode($this->result); 
$this->treeStr .= $this->_jsParse() ; 


           函數  &_doNode(&$result){ 
           
                 foreach($result  as  $key=>$value){ 
    treePList[$key])){ 
                            [$鍵]; 
                               可能 
                               在 $nstr  . 
                           }else{  _parseElementTpl($key); 
                       } 
          return  $nstr.$estr; 
           } 

       function  &_parseNodeT($cataId,  treeData[$cataId]; 
               $str  =  preg_replace('  __id__  ⁠',  $data['id'],  $this->blockTpl); 
               $str =  preg_replace('  __name__  ⁠',  $data['name'],  $str); 
               $str  =  preg_replace('  __image__  ⁠',  ($this->expand. 
               $str =  preg_replace('  __open__  ⁠',  ($this->expand?'':'none'),  $strstr); 
               $str =  preg_replace('  __inner__  ⁠',  $inner,  $str); 
               return  $str; 
       } 

       function _parseElementTpl($cataId){                 $str  =  preg_replace('  __id__  ⁠',  $data['id'],  $this->elementTpl); 
               $str =  preg_replace('  __name__  ⁠',  $data['name'],  $str); 
               $str =  preg_replace('  __image__  ⁠',  $this->imgLine,  $str); 
               return  $str; 
       }  function  _jsParse(){ 
                   $str  =  ""; 
              🎜>         *  展開分類$cataId
         * 
         *param  $cataId  int  要展開的分類的編號 *  $cataId){ 
               $str  =  ''; 
          this->_parseCurrentTpl($cataId); 
               while(isset($this->treeCList[$cataId]               $cataId  =  $this- >treeCList[$cataId]; 
                       $str  =  $      } 
               $this->currentStr  =  &$str;         } 

       function  _parseCurrentTpl($cataId){ 
   🎜>               $str  =  preg_replace('  ¦__id__  ¦',  $data['id '],  $this->currentTpl); 
               $str  =  preg_replace('          return  $str; 
       }
       /* 
         *  分析目前分類中的路徑 
       分類的編號 
       */ 
       function  expand($cataId){ 
                           ; 
                  if(isset($this->treePList[$cataId]))  $str  .=  "expand($cataId) ;"; 
               while(isset($this->treeCList[$cataId])  &&  $this->treeCList[$cataId]!=0){        $str  .=  "expand(".$this- >treeCList[$cataId].");"; 
                         } 
               $this->treeStr  .=  ""; 
       } 
       /* 
          function  getCurrentStr(){   return  $this->currentStr; 
       } 
       /* 
           function  getTreeStr(){ 
               return  $this->treeStr; 
       } 

       function  setTpl($blockTpl,  $elementTpl,  $currentTpl,   =  $blockTpl; 
               $this->elementTpl  =  $elementTplpl; 
               $this->currentTpl  =  $currentTpl; 
          🎜>
       function  setImage($open,  $close,  $line){ 
           ->imgOpen    =  $open; 
                   $this->imgCl  $this->imgLine    =  $line; 
       } 

       function  setExpend($expand){      function  setExpend($expand){ 🜠 >               $this->expand  =  $expand; 
       } 

}

//分類的基礎資料的樣子如下: 
$data  =  array(array('id'=>1,  'name'=>'name1',  'pid'=>0,  ' order'=>1), 
                                                   array('id '=>3,  'name'=>'name3',  'pid'=>0,  'order'=>1), 
                        'pid'=>3,  'order'=>1), 
                         , 
                           array('id'=>6,  'name'=>'name6,                       array('id'=>7,  ' name'=>'name7',  'pid'=>6,  'order'=>1), 
                   ,  'order'=>1), 
                                                    array( 'id'=>10,  'name'=>'name10',  'pid'=>0,  'order'=>1),
              ', 'pid'=>10, 'order'=>1),
                         1),
                          array('id'=>13, 'name'=>,name13', 'pid'=10,id'=>                  array('id'=>14 , 'name'=>'name14', 'pid'=>12, 'order'=>1),
                    >12, 'order'=>4),
                  ); echo "";
$tree = new Catagory($data);
echo "
下面是目前分類的類別樹
";
// $tree->setExpend(1);
$tree->parseNode(0);
//$tree->parseNode(1);
//$tree->expand(9);
echo $tree->getTreeStr();

echo "
以下是目前分類(分類的編號是9)的路徑
";
$tree->parseCurrent(9 );
echo $tree->getCurrentStr();

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/314589.htmlTechArticle最近問無限分類的類樹問題比較多,所以一高興自己寫了一個,我剛寫完的,大家用看,看看怎麼實現更快,更簡單,把你的樹也貼...
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn