至於添加刪除之類的功能我就不多寫了!仔細看看就知道這麼用了.難的是顯示方面希望高手擴充一下! 這是類
代碼如下:
<?php /*======================================================== 類名:catalog 功能:無限分級類 方法: 樹形顯示分類 catalog_show($id) //參數$id 遞迴調用 流程:找到父分類為0所有根分類-> 一直遞迴取得所有分類並顯示 添加分類 catalog_add($uid,$name) //$uid 父id //$name 分類名 流程:依據$uid,在此id下添加一個新子id 刪除分類 catalog_del($uid)//參數 $uid 數要刪除的分類 修改分類 catalog_set($id,$name) //參數 $id 要修改的分類 //參數 $name 新的分類名 變數: $config //資料庫資訊-> host,user,pass,dbname $catalog_dbname //分類資料庫名 資料庫: catalog_id //分類的自然序號 catalog_uid //分類的父分類 catalog_name //分類名 catalog_path_number //親緣樹數字形式 0:1:2 catalog_path_char //親緣樹字元形式 分類1:分類1.1:分類1.1.1 ========================================================*/ class catalog{ var $config; var $catalog_dbname; var $links; private function connect(){ $this->links = mysql_connect($this->config['host'],$this->config['user'],$this->config['pass']) or die("錯誤: 第".LINE."行<br>".mysql_error()); mysql_select_db($this->config['dbname'],$this->links); mysql_query("SET NAMES gb2312"); } function catalog_show($uid = 0){ $this->connect(); $sql = "Select * FROM ".$this->catalog_dbname. " Where catalog_uid = ". $uid ." orDER BY catalog_id "; $result = mysql_query($sql,$this->links) or die("錯誤: 第".LINE."行<br>".mysql_error()); if(mysql_num_rows($result) > 0){ while ($row = mysql_fetch_assoc($result)){ if($this->sun_catalog($row['catalog_id'])){//判斷有沒有子分類 $cata_img = "<img id = 'img".$row['catalog_id']."' src='./img/last_node.jpg' ōnclick='click_catalog(".$row['catalog_id'].")'/>"; }else{ $cata_img = "<img src='./img/sp.jpg'/>"; } $path = explode(":",$row['catalog_path_number']); if(count($path) > 1){ for($i=1;$i<count($path);$i++){ $path_img .= "<img src='./img/sp.jpg'/>"; } } echo $path_img.$cata_img; echo "<a class='menu' href = 'javascrīpt:send_id(".$row['catalog_id'].")'>"; echo $row['catalog_name']."</a><br>"; $path_img = ""; if($this->sun_catalog($row['catalog_id'])){ $hidden_p = "style='display:none'"; echo "<p id = 'p".$row['catalog_id']."' ".$hidden_p.">"; $this->catalog_show($row['catalog_id']); echo "</p>"; } } } } private function sun_catalog($uid){//判斷是否有子分類 $sql = "Select * FROM ".$this->catalog_dbname. " Where catalog_uid = ". $uid ." orDER BY catalog_id "; $result = mysql_query($sql,$this->links) or die("錯誤: 第".LINE."行<br>".mysql_error()); if(mysql_num_rows($result) > 0){ return true; }else{ return false; } } function catalog_add($uid,$name){ //擷取父id的親緣樹 $this->connect(); $sql = "Select * FROM ".$this->catalog_dbname." Where catalog_id = '".$uid."'"; $result = mysql_query($sql,$this->links) or die("錯誤: 第".LINE."行<br>".mysql_error()); $row = mysql_fetch_assoc($result); $fid_path_number = $row['catalog_path_number'];//id的數字親緣樹 $fid_path_char = $row['catalog_path_char'];//id的字元親緣樹 //插入資料 先插入行->再找到最新插入的id, 在依據這個id進行修改 $sql = "Insert INTO ".$this->catalog_dbname."(catalog_uid,catalog_name) VALUES(".$uid.",'".$name."')"; $result = mysql_query($sql,$this->links) or die("錯誤: 第".LINE."行<br>".mysql_error()); $catalog_id = mysql_insert_id();//擷取自己的id $catalog_path_number = $fid_path_number.":".$catalog_id;//得到自己的數字親緣數 $catalog_path_char = $fid_path_char.":".$name;//得到自己的字元親緣數 $sql = "Update '".$this->catalog_dbname."' SET catalog_path_number = '".$catalog_path_number."', catalog_path_char = '".$catalog_path_char."' Where catalog_id = ".$catalog_id; mysql_query($sql,$this->links) or die("錯誤: 第".LINE."行<br>".mysql_error()); } function catalog_del($id){ $this->connect(); $sql = "Delete FROM ".$this->catalog_dbname." Where catalog_id = ".$id; mysql_query($sql,$this->links) or die("錯誤: 第".LINE."行<br>".mysql_error()); } function catalog_set($id,$name){ $this->connect(); $sql = "Update ".$this->catalog_dbname." SET catalog_name = '".$name."' Where catalog_id = ".$id; mysql_query($sql,$this->links) or die("錯誤: 第".LINE."行<br>".mysql_error()); } } ?>
下面主要介紹了php無限極分類遞迴排序實現方法,通過一個簡單的遞迴函式實現無限遞迴分類排序,是非常實用的技巧,需要的朋友可以參考下
function order ($array,$pid=0){ $arr = array(); foreach($array as $v){ if($v['pid']==$pid){ $arr[] = $v; $arr = array_merge($arr,order($array,$v['id'])); } } return $arr;}