最近問無限分類的類樹問題比較多,所以一高興自己寫了一個,我剛寫完的,大家用用看,看看怎麼實現起來更快,更簡單,把你的樹也貼出來(要只查詢一次資料庫的)
這是一棵分類列表的類樹, 支援無限分類
一個分類下面可以同時有"包含子類的分類"和"最終分類";
唯一的優點是*****只需要進行一次的資料庫*****查詢.
樣子不是很好看,不過可以自訂修改,可以自己定義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();
http://www.bkjia.com/PHPjc/314589.htmlwww.bkjia.comtruehttp: //www.bkjia.com/PHPjc/314589.htmlTechArticle最近問無限分類的類樹問題比較多,所以一高興自己寫了一個,我剛寫完的,大家用看,看看怎麼實現更快,更簡單,把你的樹也貼...