新聞中心
下面提供一個(gè)PHP的無限分級(jí)類代碼,想要實(shí)現(xiàn)無限分級(jí)類的朋友們可以試試。Bug已經(jīng)檢查修正過,直接復(fù)制代碼就能使用(尖括號(hào)需要替換一下)。

創(chuàng)新互聯(lián)公司致力于互聯(lián)網(wǎng)品牌建設(shè)與網(wǎng)絡(luò)營銷,包括成都網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)、SEO優(yōu)化、網(wǎng)絡(luò)推廣、整站優(yōu)化營銷策劃推廣、電子商務(wù)、移動(dòng)互聯(lián)網(wǎng)營銷等。創(chuàng)新互聯(lián)公司為不同類型的客戶提供良好的互聯(lián)網(wǎng)應(yīng)用定制及解決方案,創(chuàng)新互聯(lián)公司核心團(tuán)隊(duì)十多年專注互聯(lián)網(wǎng)開發(fā),積累了豐富的網(wǎng)站經(jīng)驗(yàn),為廣大企業(yè)客戶提供一站式企業(yè)網(wǎng)站建設(shè)服務(wù),在網(wǎng)站建設(shè)行業(yè)內(nèi)樹立了良好口碑。
1、數(shù)據(jù)庫ProductShow中有b_mtype表,建表語句如下:
- CREATE TABLE `b_mtype` (
- `typeid` int(4) NOT NULL default '0',
- `typename` varchar(50) NOT NULL default '',
- `parentid` int(4) NOT NULL default '0',
- `parentstr` varchar(200) NOT NULL default '',
- `depth` int(4) NOT NULL default '0',
- `rootid` int(4) NOT NULL default '0',
- `child` varchar(200) NOT NULL default '',
- `orders` varchar(200) NOT NULL default '',
- PRIMARY KEY (`typeid`)
- ) TYPE=MyISAM;
2、ProductClass.php代碼:(直接復(fù)制即可)
- < html>
- < head>
- < meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
- < title>WHB_PHP無限級(jí)分類< /title>
- < style type="text/css">
- < !--
- .STYLE1 {color: #FF0000}
- body,td,th {
- font-family: 宋體;
- font-size: 12px;
- }
- .STYLE2 {
- color: #FFFFFF;
- font-size: 14px;
- font-weight: bold;
- }
- -->
- < /style>
- < /head>
- < body>
- < ?php
- ini_set("error_reporting","E_ALL & ~E_NOTICE");//忽略所有警告信息
- require_once("conn.php");//嵌入連接文件
- @$ToDo=$_GET["ToDo"];
- switch($ToDo)
- {
- case "add":
- echo add();
- break;
- case "edit":
- echo edit();
- break;
- case "saveadd":
- echo saveadd();
- break;
- case "saveedit":
- echo saveedit();
- break;
- case "del":
- echo del();
- break;
- default:
- ?>
- < table width="90%" border="0" align="center" cellpadding="0" cellspacing="0" class="tblborder">
- < tr>
- < td valign="top">< table width="100%" border="0" cellspacing="1" cellpadding="3">
- < tr>
- < td width="55%" height="20" align="center" bgcolor="#698FC7">< span class="tblhead">< b>< span class="STYLE2">商品類別設(shè)置< /span> < a href="?ToDo=add">添加一個(gè)新類別< /a>< /b>< /span>< /td>
- < /tr>
- < /table>
- < table width="100%" bgcolor="#cccccc" cellspacing="1" cellpadding="3">
- < tr bgcolor="#F9F9F9">
- < td width="6%" height="21">ID< /td>
- < td width="49%">類別名稱< /td>
- < td width="14%">排序< /td>
- < td width="31%">操作< /td>
- < /tr>
- < ?php
- $query=mysql_query("select * from b_mtype order by rootid,orders");
- while($arr=mysql_fetch_array($query))
- {
- ?>
- < tr>
- < td bgcolor="#FFFFFF">< ?php echo $arr["typeid"];?>< /td>
- < td bgcolor="#FFFFFF">< ?php if ($arr["depth"]>0) {
- for($i=1;$i< =$arr["depth"];$i++){ echo " ";}
- }?>
- < ? if($arr["child"]>0) { echo "+";}else {echo "-";}?>
- < ? if($arr["parentid"]==0) { echo "< b>";}?>
- < ? echo $arr["typename"];?>
- < ? if ($arr["child"]>0) {?>(< ? echo $arr["child"];?>)< ? }?>< /td>
- < td bgcolor="#FFFFFF">< ?php echo $arr["orders"];?>< /td>
- < td bgcolor="#FFFFFF">< a href="?ToDo=add&editid=< ?php echo $arr["typeid"];?>">< U>添加子類< /U>< /a>
- | < a href="?ToDo=edit&editid=< ?php echo $arr["typeid"]?>">< U>編輯類別< /U>< /a>
- | < ? if($arr["child"]==0){?>< a href="?ToDo=del&editid=< ? echo $arr["typeid"];?>" onClick="{if(confirm('刪除類別時(shí),該類別下的所有產(chǎn)品將一并被刪除,確定刪除嗎?')){return true;}return false;}">< U>刪除類別< /U>< /a>< ?}else{?>< a href="#" onClick="{if(confirm('該類別含有下屬類別,必須先刪除其下屬類別方能刪除本類別!')){return true;}return false;}">< U>刪除類別< /U>< /a>< ?}?> < /td>
- < /tr>
- < ?php
- }
- ?>
- < /table>
- < /td>
- < /tr>
- < /table>
- < ?php
- break;
- }
- ?>
- < ?php ///增加類別
- function add(){
- @$editid=$_REQUEST["editid"];
- ?>
- < form name="form1" method="post" action="?ToDo=saveadd">
- < table width="90%" align="center" cellpadding="3" cellspacing="1" bgcolor="#CCCCCC">
- < tr bgcolor="#CCCCCC">
- < td colspan="2" align="center" bgcolor="#698FC7">< span class="STYLE2">創(chuàng)建新的類別< /span>< /td>
- < /tr>
- < tr>
- < td width="25%" bgcolor="#FFFFFF">類別名稱:< /td>
- < td width="75%" bgcolor="#FFFFFF">< input name="typename" type="text" id="typename">< /td>
- < /tr>
- < tr>
- < td width="25%" height=30 bgcolor="#FFFFFF">< U>所屬類別< /U>< /td>
- < td width="75%" bgcolor="#FFFFFF">
- < select name=btype>
- < option value="0">做為主類別< /option>
- < ?
- $query=mysql_query("select * from b_mtype order by rootid,orders");
- while($arr=mysql_fetch_array($query)){ ?>
- < option value="< ? echo $arr["typeid"]?>" < ?php if($editid == $arr['typeid']){ echo " selected"; }?>>
- < ? if($arr["depth"]>0) {
- for($i=1;$i< =$arr["depth"];$i++)
- {
- echo "-";
- }
- }?>
- < ? echo $arr["typename"]?>< /option>
- < ?
- }
- ?>
- < /select>
- < /td>
- < /tr>
- < tr>
- < td bgcolor="#FFFFFF"> < /td>
- < td bgcolor="#FFFFFF">< input type="submit" name="Submit" value="保存">
- < label>
- < input type="button" name="cancel" id="cancel" value="返回" onclick="history.go(-1);" />
- < /label>< /td>
- < /tr>
- < /table>
- < /form>
- < ? }?>
- < ?php /////保存增加的類別
- function saveadd(){
- $query=mysql_query("select typeid from b_mtype order by typeid desc limit 1");
- while($arr=mysql_fetch_array($query)){
- if (!$arr["typeid"]){
- $postnum=1;
- }else{
- $postnum=$arr["typeid"]+1;
- }
- }
- if(!$postnum) $postnum=1;
- $ntid =$postnum;
- $tn =$_REQUEST["typename"];
- $btype =$_REQUEST["btype"];
- //echo $btype;
- if ($ntid=="" or $tn=="")
- {
- echo "< script language='javascript'>";
- echo "alert('參數(shù)有誤,請(qǐng)重新填寫.!');";
- echo "location.href='?';";
- echo "< /script>";
- die();
- }
- if ($btype!=0){
- $result=mysql_query("select rootid,typeid,depth,orders,parentstr from b_mtype where typeid='$btype'");
- $aa=mysql_fetch_array($result);
- $rootid=$aa['rootid'];
- //echo "aaaaaaaaaaa";
- $parentid=$aa['typeid'];
- $depth=$aa['depth'];
- $orders=$aa['orders'];
- $parentstr=$aa['parentstr'];
- //echo $rootid;
- if(($aa["depth"]+1)>20){ die("本分類限制最多只能有20級(jí)分類"); }
- }
- if($ntid == $btype)
- {
- echo "< script language='javascript'>";
- echo "alert('您所指定的typeid值重復(fù)!');";
- echo "location.href='?';";
- echo "< /script>";
- die();
- }
- if($btype!=0){
- $depth=$depth+1;
- $rootid=$rootid;
- $orders =$ntid;
- $parentid =$btype;
- //$child = $child;
- if ($parentstr=="0"){
- $parentstr=$btype;
- }else{
- $parentstr=$parentstr.",".$btype;
- }
- }else{
- $depth=0;
- $rootid=$ntid;
- $orders=1;
- $parentid=0;
- $child=0;
- $parentstr=0;
- }
- //插入類別
- $query=mysql_query("insert into b_mtype values('$ntid','$tn','$parentid','$parentstr','$depth','$rootid','','$orders')") ;
- //用于調(diào)試 echo "insert into b_mtype values('$ntid','$tn','$parentid','$parentstr','$depth','$rootid','','$orders')";
- if ($btype!=0)
- {
- if ($depth>0)
- {
- //當(dāng)上級(jí)分類深度大于0的時(shí)候要更新其父類(或父類的父類)的版面數(shù)和相關(guān)排序
- for ($i=1;$i< =$depth;$i++){
- //更新其父類版面數(shù)
- if ($parentid!=""){
- $query=mysql_query("update b_mtype set child=child+1 where typeid='$parentid'");
- }
- //得到其父類的父類的版面ID
- $result=mysql_query("select parentid from b_mtype where typeid='$parentid'");
- $par=mysql_fetch_array($result);
- if ($par['parentid']!=""){
- $parentid=$par['parentid'];
- }
- //當(dāng)循環(huán)次數(shù)大于1并且運(yùn)行到最后一次循環(huán)的時(shí)候直接進(jìn)行更新
- if ($i==$depth && $parentid!=""){
- $query=mysql_query("update b_mtype set child=child+1 where typeid='$parentid'");
- }
- }//for循環(huán)結(jié)束
- //更新該版面排序以及大于本需要和同在本分類下的版面排序序號(hào)
- $query=mysql_query("update b_mtype set orders=orders+1 where rootid='$rootid' and orders>'$orders'");
- //$orders1=$orders+1;
- //echo "orders1=".$orders1;
- $query=mysql_query("update b_mtype set orders='$orders'+1 where typeid='$ntid'");
- }else{ //對(duì)應(yīng)if ($depth>0),當(dāng)上級(jí)分類深度為0的時(shí)候只要更新上級(jí)分類版面數(shù)和該版面排序序號(hào)即可
- $query=mysql_query("update b_mtype set child=child+1 where typeid='$btype'");
- $result=mysql_query("select max(orders) from b_mtype where typeid='$ntid'");
- $ord=mysql_fetch_array($result);
- $query=mysql_query("update b_mtype set orders='$ord[0]'+1 where typeid='$ntid'");
- }
- }
- echo "< script language='javascript'>";
- echo "alert('類別添加成功!');";
- echo "location.href='?';";
- echo "< /script>";
- }
- ?>
- < ?PHP ////修改設(shè)置
- function edit(){
- //global $db,$editid,$tn,$arr;
- $editid=$_REQUEST["editid"];
- $result=mysql_query("select * from b_mtype where typeid='$editid'");
- $tn=mysql_fetch_array($result);
- ?>
- < form name="form2" action ="?ToDo=saveedit" method="post">
- < input type="hidden" name="editid" value="< ?php echo $editid;?>">
- < table width="90%" border="0" align=center cellpadding="3" cellspacing="1" bgcolor="#CCCCCC">
- < tr>
- < th height=24 colspan=2 bgcolor="#698FC7" class="STYLE2">編輯類別:< ?PHP echo $tn["typename"];?>< /th>
- < /tr>
- < tr>
- < td width="44%" height=30 bgcolor="#FFFFFF">類別名稱< /td>
- < td width="56%" bgcolor="#FFFFFF">
- < input type="text" name="typename" size="35" value="< ?php echo $tn["typename"];?>">
- < /td>
- < /tr>
- < tr>
- < td width="44%" height=30 bgcolor="#FFFFFF">< p>所屬類別< /p>
- < p> < span class="STYLE1">特別提示:< /span>< br />
- 所屬類別不能指定當(dāng)前類別(即自己)為父類別< BR>
- 所屬類別不能指定當(dāng)前類別的子類別為父類別< /p>< /td>
- < td width="56%" bgcolor="#FFFFFF">
- < select name="class">
- < option value="0">做為主類別< /option>
- < ?
- $query=mysql_query("select * from b_mtype order by rootid,orders");
- while($arr=mysql_fetch_array($query))
- { ?>
- < option value="< ?php echo $arr[typeid]?>" < ?php if ($tn["parentid"] == $arr["typeid"]) { echo "selected"; } ?>>< ? if ($arr["depth"]>0) {?>
- < ?for ($i=1;$i< =$arr["depth"];$i++){ echo "-";}?>
- < ? } ?>< ?php echo $arr["typename"]?>< /option>
- < ?
- }
- ?>
- < /select>
- < /td>
- < /tr>
- < tr>
- < td width="44%" height=24 bgcolor="#FFFFFF"> < /td>
- < td width="56%" bgcolor="#FFFFFF">
- < input type="submit" name="Submit" value="提交修改">
- < /td>
- < /tr>
- < /table>
- < /form>
- < ?
- }
- ?>
- < ?php /////保存修改
- function saveedit(){
- //global $db,$aa,$bb,$cc,$dd,$ee,$ff,$gg,$ii,$jj,$kk,$ll,$mm,$nn,$qq,$rr;
- $editid=$_REQUEST["editid"];
- $btype=$_REQUEST["class"];
- $tn=$_REQUEST["typename"];
- if($editid == $btype ){
- echo "< script language='javascript'>";
- echo "alert('所屬類別不能指定當(dāng)前類別(即自己)為父類別!');";
- echo "location.href='?';";
- echo "< /script>";
- die();
- }
- $result=mysql_query("select * from b_mtype where typeid='$editid'");
- $aa=mysql_fetch_array($result);
- $newtypeid=$aa["typeid"];
- $typename=$aa["typename"];
- $parentid=$aa["parentid"];
- $iparentid=$aa["parentid"];
- $parentstr=$aa["parentstr"];
- $depth = $aa["depth"];
- $rootid = $aa["rootid"];
- $child = $aa["child"];
- $orders = $aa["orders"];
- ////判斷所指定的類別是否其下屬類別
- if ($parentid ==0){
- if ($btype!= 0) {
- $result=mysql_query("select rootid from b_mtype where typeid='$btype'");
- $b=mysql_fetch_array($result);
- if ($rootid == $bb['rootid']) {
- echo "< script language='javascript'>";
- echo "alert('所屬類別不能指定當(dāng)前類別的子類別為父類別!');";
- echo "location.href='?';";
- echo "< /script>";
- die();
- }
- }
- }else{
- $result=mysql_query("select typeid from b_mtype where parentstr like '%$parentstr%' and typeid='$btype'");
- $cc=mysql_fetch_array($result);
- if ($cc[0]){
- echo "< script language='javascript'>";
- echo "alert('所屬類別不能指定當(dāng)前類別的子類別為父類別!');";
- echo "location.href='?';";
- echo "< /script>";
- die();
- }
- }
- if ($parentid ==0){
- $parentid=$editid;
- $iparentid=0;
- }
- mysql_query("update b_mtype set typename='$tn',parentid='$btype' where typeid='$editid'");
- $result1=mysql_query("select max(rootid) from b_mtype");
- $ss=mysql_fetch_array($result1);
- $maxrootid=$ss["rootid"]+1;
- if (!$maxrootid){ $maxrootid=1;}
- //假如更改了所屬類別
- //需要更新其原來所屬版面信息,包括深度、父級(jí)ID、版面數(shù)、排序、繼承版主等數(shù)據(jù)
- //需要更新當(dāng)前所屬版面信息
- //繼承版主數(shù)據(jù)需要另寫函數(shù)進(jìn)行更新--取消,在前臺(tái)可用typeid in parentstr來獲得
- if ($parentid != $btype && !($iparent
網(wǎng)頁名稱:打造PHP的無限分級(jí)類(完整代碼及注釋)
網(wǎng)站網(wǎng)址:http://www.dlmjj.cn/article/coohidh.html


咨詢
建站咨詢
