程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 打造PHP的無限分級類(完整代碼及注釋)

打造PHP的無限分級類(完整代碼及注釋)

編輯:關於PHP編程

下面提供一個PHP的無限分級類代碼,想要實現無限分級類的朋友們可以試試。Bug已經檢查修正過,直接復制代碼就能使用尖括號需要替換一下)。

1、數據庫ProductShow中有b_mtype表,建表語句如下:

  1. CREATE TABLE `b_mtype` (  
  2.   `typeid` int(4) NOT NULL default '0',  
  3.   `typename` varchar(50) NOT NULL default '',  
  4.   `parentid` int(4) NOT NULL default '0',  
  5.   `parentstr` varchar(200) NOT NULL default '',  
  6.   `depth` int(4) NOT NULL default '0',  
  7.   `rootid` int(4) NOT NULL default '0',  
  8.   `child` varchar(200) NOT NULL default '',  
  9.   `orders` varchar(200) NOT NULL default '',  
  10.   PRIMARY KEY  (`typeid`)  
  11. ) TYPE=MyISAM;  
  12.  

2、ProductClass.php代碼:直接復制即可)

  1. < html>  
  2. < head>  
  3. < meta http-equiv="Content-Type" content="text/html; charset=gb2312" />  
  4. < title>WHB_PHP無限級分類< /title>  
  5. < style type="text/css">  
  6. < !--  
  7. .STYLE1 {color: #FF0000}  
  8. body,td,th {  
  9.  font-family: 宋體;  
  10.  font-size: 12px;  
  11. }  
  12. .STYLE2 {  
  13.  color: #FFFFFF;  
  14.  font-size: 14px;  
  15.  font-weight: bold;  
  16. }  
  17. -->  
  18. < /style>  
  19. < /head>  
  20.  
  21. < body>  
  22. < ?php  
  23. ini_set("error_reporting","E_ALL & ~E_NOTICE");//忽略所有警告信息   
  24. require_once("conn.php");//嵌入連接文件  
  25.     @$ToDo=$_GET["ToDo"];  
  26.     switch($ToDo)  
  27.     {          
  28.     case "add":  
  29.     echo add();  
  30.     break;  
  31.      
  32.     case "edit":  
  33.      echo edit();  
  34.     break;  
  35.  
  36.      case "saveadd":  
  37.      echo saveadd();  
  38.     break;  
  39.      
  40.     case "saveedit":  
  41.     echo saveedit();  
  42.     break;  
  43.      
  44.     case "del":  
  45.     echo del();  
  46.     break;  
  47.         
  48.     default:  
  49. ?>  
  50.  
  51. < table width="90%"   border="0" align="center" cellpadding="0" cellspacing="0" class="tblborder">  
  52. < tr>  
  53.      < td valign="top">< table width="100%"   border="0" cellspacing="1" cellpadding="3">  
  54.        < tr>  
  55.            < td width="55%" height="20" align="center" bgcolor="#698FC7">< span class="tblhead">< b>< span class="STYLE2">商品類別設置< /span> < a href="?ToDo=add">添加一個新類別< /a>< /b>< /span>< /td>  
  56.             
  57.         < /tr>  
  58.      < /table>  
  59.        < table width="100%" bgcolor="#cccccc" cellspacing="1" cellpadding="3">  
  60.          < tr bgcolor="#F9F9F9">  
  61.            < td width="6%" height="21">ID< /td>  
  62.            < td width="49%">類別名稱< /td>  
  63.            < td width="14%">排序< /td>  
  64.            < td width="31%">操作< /td>  
  65.          < /tr>  
  66.    < ?php  
  67.          
  68.    $query=mysql_query("select * from b_mtype order by rootid,orders");  
  69.    while($arr=mysql_fetch_array($query))  
  70.    {  
  71.      
  72.    ?>  
  73.          < tr>  
  74.            < td   bgcolor="#FFFFFF">< ?php echo $arr["typeid"];?>< /td>  
  75.            < td   bgcolor="#FFFFFF">< ?php if ($arr["depth"]>0) {  
  76.                       for($i=1;$i< =$arr["depth"];$i++){ echo "&nbsp;";}  
  77.      }?>  
  78.  
  79.        < ? if($arr["child"]>0) { echo "+";}else {echo "-";}?>   
  80.        < ? if($arr["parentid"]==0) { echo "< b>";}?>  
  81.        < ? echo $arr["typename"];?>  
  82.        < ? if ($arr["child"]>0) {?>(< ? echo $arr["child"];?>)< ? }?>< /td>  
  83.            < td bgcolor="#FFFFFF">< ?php echo $arr["orders"];?>< /td>  
  84.            < td bgcolor="#FFFFFF">< a href="?ToDo=add&editid=< ?php echo $arr["typeid"];?>">< U>添加子類< /U>< /a>   
  85.      | < a href="?ToDo=edit&editid=< ?php echo $arr["typeid"]?>">< U>編輯類別< /U>< /a>   
  86.             |   < ? if($arr["child"]==0){?>< a href="?ToDo=del&editid=< ? echo $arr["typeid"];?>" onClick="{if(confirm('刪除類別時,該類別下的所有產品將一並被刪除,確定刪除嗎?')){return true;}return false;}">< U>刪除類別< /U>< /a>< ?}else{?>< a href="#" onClick="{if(confirm('該類別含有下屬類別,必須先刪除其下屬類別方能刪除本類別!')){return true;}return false;}">< U>刪除類別< /U>< /a>< ?}?>&nbsp;< /td>  
  87.          < /tr>  
  88.    < ?php  
  89.    }  
  90.    ?>  
  91.        < /table>  
  92.      < /td>  
  93.    < /tr>  
  94. < /table>   
  95. < ?php  
  96.      break;  
  97.     }  
  98.     ?>  
  99.  
  100.  
  101. < ?php   ///增加類別  
  102. function add(){  
  103.     @$editid=$_REQUEST["editid"];  
  104. ?>  
  105.     < form name="form1" method="post" action="?ToDo=saveadd">  
  106.          < table width="90%"   align="center" cellpadding="3" cellspacing="1" bgcolor="#CCCCCC">  
  107.            < tr bgcolor="#CCCCCC">  
  108.              < td colspan="2" align="center" bgcolor="#698FC7">< span class="STYLE2">創建新的類別< /span>< /td>  
  109.            < /tr>               
  110.            < tr>  
  111.              < td width="25%" bgcolor="#FFFFFF">類別名稱:< /td>  
  112.              < td width="75%" bgcolor="#FFFFFF">< input name="typename" type="text" id="typename">< /td>  
  113.            < /tr>  
  114.           < tr>   
  115.             < td width="25%" height=30 bgcolor="#FFFFFF">< U>所屬類別< /U>< /td>  
  116.             < td width="75%" bgcolor="#FFFFFF">   
  117.              < select name=btype>  
  118.              < option value="0">做為主類別< /option>  
  119.              < ?   
  120.      $query=mysql_query("select * from b_mtype order by rootid,orders");     
  121.      while($arr=mysql_fetch_array($query)){ ?>  
  122.              < option value="< ? echo $arr["typeid"]?>" < ?php if($editid == $arr['typeid']){ echo " selected"; }?>>  
  123.              < ? if($arr["depth"]>0) {  
  124.                for($i=1;$i< =$arr["depth"];$i++)  
  125.       {  
  126.         echo "-";  
  127.           }  
  128.          
  129.               }?>  
  130.               < ? echo $arr["typename"]?>< /option>  
  131.              < ?  
  132.            }    
  133.               ?>  
  134.              < /select>  
  135.              < /td>  
  136.            < /tr>  
  137.            < tr>  
  138.              < td bgcolor="#FFFFFF">&nbsp;< /td>  
  139.              < td bgcolor="#FFFFFF">< input type="submit" name="Submit" value="保存">  
  140.                < label>  
  141.                < input type="button" name="cancel" id="cancel" value="返回" onclick="history.go(-1);" />  
  142.              < /label>< /td>  
  143.            < /tr>  
  144.          < /table>  
  145. < /form>  
  146. < ? }?>  
  147.  
  148. < ?php    /////保存增加的類別  
  149. function saveadd(){  
  150.  
  151. $query=mysql_query("select typeid from b_mtype order by typeid desc limit 1");  
  152. while($arr=mysql_fetch_array($query)){  
  153. if (!$arr["typeid"]){  
  154.       $postnum=1;  
  155.     
  156. }else{  
  157.       $postnum=$arr["typeid"]+1;  
  158.     
  159. }     
  160. }  
  161. if(!$postnum$postnum=1;  
  162.  
  163. $ntid   =$postnum;  
  164. $tn     =$_REQUEST["typename"];  
  165. $btype =$_REQUEST["btype"];  
  166.  
  167.  
  168. //echo $btype;  
  169.  
  170. if ($ntid=="" or $tn=="")  
  171. {  
  172. echo "< script language='javascript'>";  
  173. echo "alert('參數有誤,請重新填寫.!');";  
  174. echo "location.href='?';";  
  175. echo "< /script>";  
  176. die();  
  177. }  
  178.  
  179. if ($btype!=0){  
  180.     
  181.     $result=mysql_query("select rootid,typeid,depth,orders,parentstr from b_mtype where typeid='$btype'");  
  182.     $aa=mysql_fetch_array($result);  
  183.     $rootid=$aa['rootid'];  
  184.     //echo "aaaaaaaaaaa";  
  185.     $parentid=$aa['typeid'];  
  186.     $depth=$aa['depth'];  
  187.     $orders=$aa['orders'];  
  188.     $parentstr=$aa['parentstr'];  
  189.     //echo $rootid;  
  190.  
  191.     if(($aa["depth"]+1)>20){   die("本分類限制最多只能有20級分類"); }  
  192.  
  193. }  
  194.  
  195. if($ntid == $btype)  
  196. {  
  197. echo "< script language='javascript'>";  
  198. echo "alert('您所指定的typeid值重復!');";  
  199. echo "location.href='?';";  
  200. echo "< /script>";  
  201. die();  
  202. }  
  203.  
  204. if($btype!=0){  
  205.  
  206.    $depth=$depth+1;  
  207.    $rootid=$rootid;  
  208.    $orders =$ntid;  
  209.    $parentid =$btype;  
  210.    //$child = $child;  
  211.    if ($parentstr=="0"){  
  212.       $parentstr=$btype;  
  213.    }else{  
  214.       $parentstr=$parentstr.",".$btype;  
  215.    }  
  216.  
  217. }else{  
  218.    $depth=0;  
  219.    $rootid=$ntid;  
  220.    $orders=1;  
  221.    $parentid=0;  
  222.    $child=0;  
  223.    $parentstr=0;  
  224. }  
  225.  
  226. //插入類別  
  227. $query=mysql_query("insert into b_mtype values('$ntid','$tn','$parentid','$parentstr','$depth','$rootid','','$orders')") ;  
  228. //用於調試 echo "insert into b_mtype values('$ntid','$tn','$parentid','$parentstr','$depth','$rootid','','$orders')";  
  229.  
  230. if ($btype!=0)  
  231.    {  
  232.       if ($depth>0)  
  233.       {  
  234.          //當上級分類深度大於0的時候要更新其父類或父類的父類)的版面數和相關排序  
  235.          for ($i=1;$i< =$depth;$i++){  
  236.             //更新其父類版面數  
  237.             if ($parentid!=""){  
  238.                $query=mysql_query("update b_mtype set child=child+1 where typeid='$parentid'");  
  239.             }  
  240.             //得到其父類的父類的版面ID  
  241.             $result=mysql_query("select parentid from b_mtype where typeid='$parentid'");  
  242.             $par=mysql_fetch_array($result);  
  243.     
  244.             if ($par['parentid']!=""){  
  245.               $parentid=$par['parentid'];  
  246.             }  
  247.             //當循環次數大於1並且運行到最後一次循環的時候直接進行更新  
  248.             if ($i==$depth && $parentid!=""){  
  249.               $query=mysql_query("update b_mtype set child=child+1 where typeid='$parentid'");  
  250.             }  
  251.           }//for循環結束  
  252.           //更新該版面排序以及大於本需要和同在本分類下的版面排序序號  
  253.           $query=mysql_query("update b_mtype set orders=orders+1 where rootid='$rootid' and orders>'$orders'");  
  254.           //$orders1=$orders+1;  
  255.           //echo "orders1=".$orders1;  
  256.           $query=mysql_query("update b_mtype set orders='$orders'+1 where typeid='$ntid'");    
  257.     
  258.         }else{  //對應if ($depth>0),當上級分類深度為0的時候只要更新上級分類版面數和該版面排序序號即可    
  259.         $query=mysql_query("update b_mtype set child=child+1 where typeid='$btype'");  
  260.         $result=mysql_query("select max(orders) from b_mtype where typeid='$ntid'");  
  261.         $ord=mysql_fetch_array($result);     
  262.         $query=mysql_query("update b_mtype set orders='$ord[0]'+1 where typeid='$ntid'");  
  263.         }  
  264.       
  265. }  
  266.    
  267. echo "< script language='javascript'>";  
  268. echo "alert('類別添加成功!');";  
  269. echo "location.href='?';";  
  270. echo "< /script>";  
  271. }  
  272. ?>  
  273.  
  274. < ?PHP    ////修改設置  
  275. function edit(){  
  276.    //global $db,$editid,$tn,$arr;  
  277.  
  278. $editid=$_REQUEST["editid"];  
  279.  
  280. $result=mysql_query("select * from b_mtype where typeid='$editid'");  
  281. $tn=mysql_fetch_array($result);  
  282. ?>       
  283. < form   name="form2" action ="?ToDo=saveedit" method="post">         
  284. < input type="hidden" name="editid" value="< ?php echo $editid;?>">  
  285. < table width="90%" border="0"   align=center cellpadding="3" cellspacing="1" bgcolor="#CCCCCC">  
  286. < tr>   
  287. < th height=24 colspan=2 bgcolor="#698FC7" class="STYLE2">編輯類別:< ?PHP echo $tn["typename"];?>< /th>  
  288. < /tr>  
  289. < tr>   
  290. < td width="44%" height=30 bgcolor="#FFFFFF">類別名稱< /td>  
  291. < td width="56%" bgcolor="#FFFFFF">   
  292. < input type="text" name="typename" size="35"   value="< ?php echo $tn["typename"];?>">  
  293. < /td>  
  294. < /tr>  
  295.  
  296. < tr>   
  297. < td width="44%" height=30 bgcolor="#FFFFFF">< p>所屬類別< /p>  
  298.   < p>    < span class="STYLE1">特別提示:< /span>< br />  
  299.     所屬類別不能指定當前類別(即自己)為父類別< BR>  
  300.     所屬類別不能指定當前類別的子類別為父類別< /p>< /td>  
  301. < td width="56%" bgcolor="#FFFFFF">   
  302. < select name="class">  
  303. < option value="0">做為主類別< /option>  
  304. < ?   
  305. $query=mysql_query("select * from b_mtype order by rootid,orders");  
  306.  
  307. while($arr=mysql_fetch_array($query))  
  308. { ?>  
  309. < option value="< ?php echo $arr[typeid]?>" < ?php if ($tn["parentid"] == $arr["typeid"]) { echo "selected"; } ?>>< ? if ($arr["depth"]>0) {?>  
  310. < ?for ($i=1;$i< =$arr["depth"];$i++){ echo "-";}?>  
  311. < ? } ?>< ?php echo $arr["typename"]?>< /option>  
  312. < ?  
  313. }  
  314. ?>  
  315. < /select>  
  316. < /td>  
  317. < /tr>  
  318.  
  319. < tr>   
  320. < td width="44%" height=24 bgcolor="#FFFFFF">&nbsp;< /td>  
  321. < td width="56%" bgcolor="#FFFFFF">   
  322. < input type="submit" name="Submit" value="提交修改">  
  323. < /td>  
  324. < /tr>  
  325. < /table>  
  326. < /form>  
  327.  
  328. < ?   
  329. }  
  330.  
  331. ?>  
  332.  
  333.  
  334. < ?php   /////保存修改  
  335. function saveedit(){  
  336.    //global $db,$aa,$bb,$cc,$dd,$ee,$ff,$gg,$ii,$jj,$kk,$ll,$mm,$nn,$qq,$rr;  
  337.    $editid=$_REQUEST["editid"];  
  338.    $btype=$_REQUEST["class"];  
  339.    $tn=$_REQUEST["typename"];  
  340.  
  341.    if($editid == $btype ){  
  342.  echo "< script language='javascript'>";  
  343.     echo "alert('所屬類別不能指定當前類別(即自己)為父類別!');";  
  344.     echo "location.href='?';";  
  345.     echo "< /script>";  
  346.     die();   
  347.  }  
  348.  
  349.    $result=mysql_query("select * from b_mtype where typeid='$editid'");  
  350.    $aa=mysql_fetch_array($result);  
  351.    $newtypeid=$aa["typeid"];  
  352.    $typename=$aa["typename"];  
  353.    $parentid=$aa["parentid"];  
  354.    $iparentid=$aa["parentid"];  
  355.    $parentstr=$aa["parentstr"];  
  356.    $depth = $aa["depth"];  
  357.    $rootid = $aa["rootid"];  
  358.    $child = $aa["child"];  
  359.    $orders = $aa["orders"];  
  360.  
  361.    ////判斷所指定的類別是否其下屬類別  
  362.    if ($parentid ==0){  
  363. if ($btype!= 0) {  
  364. $result=mysql_query("select rootid from b_mtype where typeid='$btype'");  
  365. $b=mysql_fetch_array($result);  
  366. if ($rootid == $bb['rootid']) {  
  367.  echo "< script language='javascript'>";  
  368.     echo "alert('所屬類別不能指定當前類別的子類別為父類別!');";  
  369.     echo "location.href='?';";  
  370.     echo "< /script>";  
  371.     die();   
  372.    }   
  373. }  
  374.  
  375.     }else{  
  376. $result=mysql_query("select typeid from b_mtype where parentstr like '%$parentstr%' and typeid='$btype'");  
  377. $cc=mysql_fetch_array($result);  
  378. if ($cc[0]){  
  379.    echo "< script language='javascript'>";  
  380.     echo "alert('所屬類別不能指定當前類別的子類別為父類別!');";  
  381.     echo "location.href='?';";  
  382.     echo "< /script>";  
  383.     die();     
  384. }  
  385.    }  
  386.  
  387.    if ($parentid ==0){  
  388. $parentid=$editid;  
  389. $iparentid=0;  
  390.    }  
  391.    mysql_query("update b_mtype set typename='$tn',parentid='$btype' where typeid='$editid'");  
  392.  
  393.    $result1=mysql_query("select max(rootid) from b_mtype");  
  394.    $ss=mysql_fetch_array($result1);  
  395.    $maxrootid=$ss["rootid"]+1;  
  396.    if (!$maxrootid){ $maxrootid=1;}  
  397.     
  398.  
  399. //假如更改了所屬類別  
  400. //需要更新其原來所屬版面信息,包括深度、父級ID、版面數、排序、繼承版主等數據  
  401. //需要更新當前所屬版面信息  
  402. //繼承版主數據需要另寫函數進行更新--取消,在前台可用typeid in parentstr來獲得  
  403.  
  404. if ($parentid != $btype && !($iparentid==0 && $btype==0)) {  
  405.     //如果原來不是一級分類改成一級分類  
  406.     //echo "ggg";  
  407.       if ($iparentid>0 && $btype==0)   
  408.       {  
  409.    //更新當前版面數據  
  410.    mysql_query("update b_mtype set depth=0,orders=0,rootid='$editid',parentid=0,parentstr='0' where typeid='$newtypeid'");  
  411.    $parentstr=$parentstr .",";  
  412.    $result=mysql_query("select count(*) from b_mtype where parentstr like '%$parentstr%'");  
  413.    $dd=mysql_fetch_array($result);  
  414.    $postcount=$dd[0];  
  415.     if (emptyempty($postcount))  
  416.     {  
  417.        $postcount=1;  
  418.        }else{  
  419.        $postcount=$postcount+1;  
  420.        }  
  421.    //更新其原來所屬類別版面數  
  422.    mysql_query("update b_mtype set child=child-'$postcount' where typeid='$iparentid'");  
  423.    //更新其原來所屬類別數據,排序相當於剪枝而不需考慮  
  424.    for ($i=1;$i< =$depth;$i++)  
  425.     {  
  426.     ////得到其父類的父類的版面ID  
  427.     $result2=mysql_query("select parentid from b_mtype where typeid='$iparentid'");  
  428.     $ee=mysql_fetch_array($result2);  
  429.     if (!$ee[0]){  
  430.      $iparentid=$ee[0];  
  431.      mysql_query("update b_mtype set child=child-'$postcount' where typeid='$iparentid'");  
  432.            }  
  433.        } //for end  
  434.     
  435.    if ($child >0){     //m1  
  436.    //更新其下屬類別數據  
  437.    //有下屬類別,排序不需考慮,更新下屬類別深度和一級排序ID(rootid)數據  
  438.    //更新當前版面數據  
  439.      
  440.      $i=0;  
  441.      $query=mysql_query("select * from b_mtype where parentstr like '%$parentstr%'");  
  442.      while($arr=mysql_fetch_array($query)){  
  443.  
  444.      $i++;  
  445.      $mParentStr=strtr($arr['parentstr'],$parentstr," ");  
  446.      mysql_query("update b_mtype set depth=depth-'$depth',rootid='$maxrootid',parentstr='$mParentStr' where typeid='$arr[typeid]");  
  447.      }  
  448.     }   //m1 end  
  449.     }elseif ($iparentid > 0 && $btype >0) {  
  450.        
  451.      //將一個分類別移動到其他分類別下  
  452.      //獲得所指定的類別的相關信息  
  453.      $result=mysql_query("select * from b_mtype where typeid='$btype'");  
  454.      $gg=mysql_fetch_array($result);  
  455.      //得到其下屬版面數  
  456.      $parentstr=$parentstr .",";  
  457.      $iparentstr=$parentstr.$editid;  
  458.      echo $iparentstr;  
  459.      $result1=mysql_query("select count(*) from b_mtype where parentstr like '%$iparentstr%'");  
  460.      $ii=mysql_fetch_array($result1);  
  461.      $postcount=$ii[0];  
  462.      if (emptyempty($postcount)){ $postcount=1; }  
  463.  
  464.      //在獲得移動過來的版面數後更新排序在指定類別之後的類別排序數據  
  465.  
  466.       $query=mysql_query("update b_mtype set orders=orders+'$postcount'+1 where rootid='$gg[rootid]' and orders>'$gg[orders]'");  
  467.      //更新當前版面數據  
  468.       If($gg[parentstr]=="0") {  
  469.        
  470.         // $idepth=$gg[depth]+1;  
  471.         // $iorders=$gg[orders]+1;  
  472.  
  473.          mysql_query("update b_mtype set depth='$gg[depth]'+1,orders='$gg[orders]'+1,rootid='$gg[rootid]',parentid='$btype',parentstr='$gg[typeid]' where typeid='$newtypeid'");  
  474.       }Else{  
  475.       $aparentstr=$gg['parentstr'].",".$gg['typeid'];  
  476.          $idepth=$gg['depth']+1;  
  477.          $iorders=$gg['orders']+1;  
  478.          mysql_query("update b_mtype set depth='$idepth',orders='$iorders',rootid='$gg[rootid]',parentid='$btype',parentstr='$aparentstr' where typeid='$editid'");  
  479.       }  
  480.       $i=1;  
  481.       //如果有則更新下屬版面數據  
  482.       //深度為原有深度加上當前所屬類別的深度  
  483.    $iparentstr=$parentstr.$newtypeid;  
  484.         $query=mysql_query("select * from b_mtype where parentstr like '%$iparentstr%' order by orders");  
  485.       while($arr=mysql_fetch_array($query)){    // m2  
  486.        $i++;  
  487.            If ($gg['parentstr']=="0") {  
  488.             $iParentStr=$gg['typeid'].",".strtr($arr['parentstr'],$parentstr," ");  
  489.         }Else{  
  490.             $iParentStr=$gg["parentstr"] .",".$gg["typeid"] . "," . strtr($arr['parentstr'],$parentstr," ");  
  491.         }  
  492.     
  493.         $query=mysql_query("update b_mtype set depth=depth+'$gg[depth]'-'$depth'+1,orders='$gg[orders]'+'$i',rootid='$gg[rootid]',parentstr='$iParentStr' where typeid='$arr[typeid]'");  
  494.       }   ///m2 end  
  495.  
  496.       $parentid=$btype;  
  497.       if ($rootid==$gg['rootid']) {   ///m3  
  498.      //在同一分類下移動  
  499.      //更新所指向的上級類別版面數,i為本次移動過來的版面數  
  500.      //更新其父類版面數  
  501.        $query=mysql_query("update b_mtype set child=child+'$i' where (! parentid=0) and typeid='$parentid'");  
  502.        for ($k=1;$k< =$gg['depth'];$k++){  
  503.    //得到其父類的父類的版面ID  
  504.      $result=mysql_query("select parentid from b_mtype where (! parentid=0) and typeid='$parentid'");  
  505.      $vv=mysql_fetch_array($result);  
  506.       if ($vv[0]){  
  507.     $parentid=$vv[0];  
  508.     //更新其父類的父類版面數  
  509.     mysql_query("update b_mtype set child=child+'$i' where (! parentid=0) and   typeid='$parentid'");  
  510.        }  
  511.         
  512.     } // for end  
  513.       //更新其原父類版面數  
  514.       mysql_query("update b_mtype set child=child-'$i' where (! parentid=0) and typeid='$iparentid'");  
  515.       //更新其原來所屬類別數據  
  516.  
  517.       for ($k=1;$k< =$depth;$k++){  
  518.      //得到其原父類的父類的版面ID  
  519.      $result1=mysql_query("select parentid from b_mtype where (! parentid=0) and typeid='$iparentid'");  
  520.      $zz=mysql_fetch_array($result1);  
  521.      if ($zz[0]){  
  522.     $iparentid=$zz[0];  
  523.      
  524.     //更新其原父類的父類版面數  
  525.     mysql_query("update b_mtype set child=child-'$i' where (! parentid=0) and   typeid='$iparentid'");  
  526.       }  
  527.      }//for end  
  528.         
  529.      }else{   ////m3 end  
  530.      //更新所指向的上級類別版面數,i為本次移動過來的版面數  
  531.      //更新其父類版面數  
  532.     mysql_query("update b_mtype set child=child+'$i' where typeid='$parentid'");  
  533.      for ($k=1;$k< =$gg["depth"];$k++){  
  534.    //得到其父類的父類的版面ID  
  535.    $result2=mysql_query("select parentid from b_mtype where typeid='$parentid'");  
  536.    $yy=mysql_fetch_array($result2);  
  537.    if ($yy[0]){  
  538.     $parentid=$yy[0];  
  539.     //更新其父類的父類版面數  
  540.     mysql_query("update b_mtype set child=child+'$i' where typeid='$parentid'");  
  541.     }  
  542.     
  543.       } //for end  
  544.       //更新其原父類版面數  
  545.       mysql_query("update b_mtype set child=child-'$i' where typeid='$iparentid'");  
  546.       //更新其原來所屬類別數據  
  547.       for ($k=1;$k< =$depth;$k++){  
  548.    //得到其原父類的父類的版面ID  
  549.    $query=mysql_query("select parentid from b_mtype where typeid='$iparentid'");  
  550.    while($arr=mysql_fetch_array($query))  
  551.     {  
  552.          if ($arr[0]){  
  553.           $iparentid=$arr[0];  
  554.           //更新其原父類的父類版面數  
  555.           mysql_query("update b_mtype set child=child-'$i' where typeid='$iparentid'");  
  556.              }  
  557.         }  
  558.        } //for end   
  559.     } ///m3 end    
  560.     }else{  
  561. //如果原來是一級類別改成其他類別的下屬類別  
  562. //得到所指定的類別的相關信息  
  563. $result=mysql_query("select * from b_mtype where typeid='$btype'");  
  564. $gg=mysql_fetch_array($result);  
  565. echo $rootid;  
  566. $result1=mysql_query("select count(*) from b_mtype where rootid='$rootid'");  
  567. $qq=mysql_fetch_array($result1);  
  568. $postcount=$qq[0];  
  569. //更新所指向的上級類別版面數,i為本次移動過來的版面數  
  570. $parentid=$btype;  
  571. //更新其父類版面數  
  572. mysql_query("update b_mtype set child=child+'$postcount' where typeid='$parentid'");  
  573.  
  574. for ($k=1;$k< =$gg['depth'];$k++){  
  575.    //得到其父類的父類的版面ID  
  576.    $result2=mysql_query("select parentid from b_mtype where typeid='$parentid'");  
  577.    $rr=mysql_fetch_array($result2);  
  578.    if ($rr[0]){  
  579.     $parentid=$rr[0];  
  580.     //更新其父類的父類版面數  
  581.     mysql_query("update b_mtype set child=child+'$postcount' where typeid='$parentid'");  
  582.    }  
  583.  
  584. ///for end   
  585. //在獲得移動過來的版面數後更新排序在指定類別之後的類別排序數據  
  586. mysql_query("update b_mtype set orders=orders+'$postcount'+1 where rootid='$gg[rootid]' and orders>'$gg[orders]'");  
  587. $i=0;  
  588. $query=mysql_query("select * from b_mtype where rootid='$rootid' order by orders");  
  589. while($arr=mysql_fetch_array($query))  
  590. {  
  591.     $i++;  
  592.     if ($arr['parentid'] ==0)  
  593.     {  
  594.    if ($gg['parentstr'] =="0")  
  595.     {   
  596.           $parentstr=$gg['typeid'];  
  597.        }else{  
  598.           $parentstr=$gg['parentstr'] .",".$gg['typeid'];  
  599.        }  
  600.      mysql_query("update b_mtype set depth=depth+'$gg[depth]'+1,orders='$gg[orders]'+'$i',rootid='$gg[rootid]',parentstr='$parentstr',parentid='$btype' where typeid='$arr[typeid]'");  
  601.      
  602.     }else{  
  603.    if ($gg['parentstr'] =="0"){  
  604.          $parentstr=$gg['typeid'] ."," . $arr['parentstr'];  
  605.        }else{  
  606.          $parentstr=$gg['parentstr'] .",".$gg['typeid'] .","$arr['parentstr'];  
  607.        }  
  608.       mysql_query("update b_mtype set depth=depth+'$gg[depth]'+1,orders='$gg[orders]'+'$i',rootid='$gg[rootid]',parentstr='$parentstr' where typeid='$arr[typeid]'");  
  609.  
  610.      }  
  611.    }///while end  
  612. }//else end   
  613. }  
  614. echo "< script language='javascript'>";  
  615. echo "alert('類別修改成功!');";  
  616. echo "location.href='?';";  
  617. echo "< /script>";  
  618. }  
  619. ?>  
  620.  
  621. < ?php   
  622. function   del(){  
  623.  
  624. ////更新其上級版面類別數,如果該類別含有下級類別則不允許刪除  
  625. $editid=$_REQUEST["editid"];  
  626. $result=mysql_query("select parentstr,child,depth from b_mtype where typeid='$editid'");  
  627. $aa=mysql_fetch_array($result);  
  628. if ($aa[0]!="") {  
  629. if ($aa[1]>0){  
  630.  echo "< script language='javascript'>";  
  631.     echo "alert('該類別含有下屬類別,必須先刪除其下屬類別方能刪除本類別!');";  
  632.     echo "location.href='?';";  
  633.     echo "< /script>";  
  634.     die();   
  635. }  
  636. //如果有上級版面,則更新數據  
  637.  
  638. if ($aa[2]>0){  
  639. $query=mysql_query("update b_mtype set child=child-1 where typeid in ($aa[0])");  
  640. }  
  641. $query=mysql_query("delete from b_mtype where typeid='$editid'");  
  642.  
  643.  
  644. }  
  645. echo "< script language='javascript'>";  
  646. echo "alert('類別刪除成功!');";  
  647. echo "location.href='?';";  
  648. echo "< /script>";  
  649. }  
  650. ?>  
  651. < /body>  
  652. < /html>  
  653.  

試試看這個無限分級類吧!

編輯推薦】

  1. 9個開發人員應該知道的PHP庫
  2. 9月編程語言排行榜:PHP的歷史性突破
  3. 專題:PHP開發基礎入門
  4. PHP 5.3.0發布 新增命名空間等多項特性
  5. PHP命名空間規則解析及高級功能

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved