佳木斯湛栽影视文化发展公司

主頁 > 知識庫 > php+mysql實現(xiàn)的無限分類方法類定義與使用示例

php+mysql實現(xiàn)的無限分類方法類定義與使用示例

熱門標(biāo)簽:服務(wù)器配置 科大訊飛語音識別系統(tǒng) 阿里云 Linux服務(wù)器 電子圍欄 Mysql連接數(shù)設(shè)置 團購網(wǎng)站 銀行業(yè)務(wù)

本文實例講述了php+mysql實現(xiàn)的無限分類方法類定義與使用。分享給大家供大家參考,具體如下:

創(chuàng)建數(shù)據(jù)庫以及表

 CREATE DATABASE `sortclass`DEFAULT CHARSET utf8;
 CREATE TABLE IF NOT EXISTS `class` (
 `cid` mediumint(8) unsigned NOT NULL auto_increment,
 `pid` mediumint(8) unsigned NOT NULL,
 `cname` varchar(50) NOT NULL,
 PRIMARY KEY (`cid`),
 KEY `pid` (`pid`)
 ) ENGINE=MyISAM DEFAULT CHARSET=utf8;

header("Content-type: text/html; charset=utf-8");
//連接數(shù)據(jù)庫
$link = mysql_connect('localhost','root','eric') or die(mysql_error());
mysql_select_db('sortclass',$link);
//無限分類類庫
class SortClass{
 var $data = array();
 var $child = array(-1=>array());
 var $layer = array(-1=>-1);
 var $parent = array();
 var $link;
 var $table;
 function SortClass($link, $table){
  $this->setNode(0, -1, '頂極節(jié)點');
  $this->link = $link;
  $this->table = $table;
  $node = array();
  $results = mysql_query('select * from '.$this->table.'',$this->link);
  while($node = mysql_fetch_assoc($results)){
   $this->setNode($node['cid'],$node['pid'],$node['cname']);
  }
 }
 function setNode ($id, $parent, $value){
  $parent = $parent?$parent:0;
  $this->data[$id] = $value;
  $this->child[$id] = array();
  $this->child[$parent][] = $id;
  $this->parent[$id] = $parent;
  $this->layer[$id] = !isset($this->layer[$parent])? 0 : $this->layer[$parent] + 1;
 }
 function getList ($tree, $root= 0){
  foreach ($this->child[$root] as $key=>$id){
   $tree[] = $id;
   if ($this->child[$id]) $this->getList($tree, $id);
  }
 }
 function getValue ($id){return $this->data[$id];}
 function getLayer ($id, $space = false){
  return $space?str_repeat($space, $this->layer[$id]):$this->layer[$id];
 }
 function getParent ($id){return $this->parent[$id];}
 function getParents ($id){
  while ($this->parent[$id] != -1){
   $id = $parent[$this->layer[$id]] = $this->parent[$id];
  }
  ksort($parent);
  reset($parent);
  return $parent;
 }
 function getChild ($id){return $this->child[$id];}
 function getChilds ($id = 0){
  $child = array($id);
  $this->getList($child, $id);
  return $child;
 }
 function addNode($name,$pid){
  mysql_query("insert into $this->table (`pid`,`cname`) values ('$pid','$name')",$this->link);
 }
 function modNode($cid, $newName){
  mysql_query("update $this->table set `cname`='$newName' where `cid` = $cid",$this->link);
 }
 function delNode($cid){
  $allChilds = $this->getChilds($cid);
  $sql ='';
  if(empty($allChilds)){
   $sql = "delete from $this->table where `cid` = $cid";
  }else{
   $sql = 'delete from '.$this->table.' where `cid` in ('.implode(',',$allChilds).','.$cid.')';
  }
  mysql_query($sql,$this->link);
 }
 function moveNode($cid, $topid){
  mysql_query("update $this->table set `pid`=$topid where `cid` = $cid", $this->link);
 }
}
//函數(shù)
function back(){
 echo 'script language="JavaScript">window.location.href="test.php?" rel="external nofollow" +new Date().getTime();/script>';
 exit;
}
//聲成select
function makeSelect($array,$formName){
 global $tree;
 $select = 'select name="'.$formName.'">';
 foreach ($array as $id){
  $select.='option value="'.$id.'">'.$tree->getLayer($id, '|-').$tree->getValue($id)."/option>";
 }
 return $select.'/select>';
}
$tree = new SortClass($link,'`class`');
$op = !empty($_POST['op']) ? $_POST['op'] : $_GET['op'];
if(!empty($op)){

 if($op=='add'){
  $tree->addNode($_POST['cname'],$_POST['pid']);
  back();
 }

 if($op=='mod'){
  $tree->modNode($_POST['cid'],$_POST['cname']);
  back();
 }

 if($op=='del'){
  $tree->delNode($_GET['cid']);
  back();
 }

 if($op=='move'){
  $tree->moveNode($_POST['who'],$_POST['to']);
  back();
 }
}
$category = $tree->getChilds();
?>
 style type="text/css">
  body{font-size:12px;}
  ul{list-style:none;}
  a{cursor:pointer;}
 /style>
 script language="javascript">
  function $(e){return document.getElementById(e);}
  function mod(cid){
   $('cid').value=cid;
   $('op').value='mod';
   $('name').style.border='1px solid red';
  }
 /script>
 form action="test.php" method="post">
  名稱:input type="text" id="name" name="cname" /> 添加到:?=makeSelect($category,'pid')?>br />
  input type="hidden" id="op" name="op" value="add" />
  input type="hidden" id="cid" name="cid" />
  input type="submit" value="Submit" />
 /form>
 h3>移動分類/h3>
 form action="test.php" method="post">
  ?=makeSelect($category,'who')?>移動到:?=makeSelect($category,'to')?>
  input type="hidden" id="op" name="op" value="move" />
  input type="submit" value="Submit" />
 /form>
 ul>
?php
foreach ($category as $id){
 echo 'li>'.$tree->getLayer($id, '|- ').$tree->getValue($id).' a href="test.php?op=delcid='.$id.'" rel="external nofollow" >Del/a> a onclick="mod('.$id.')">Edit/a> /li>';
}
?>
/ul>

更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《php+mysql數(shù)據(jù)庫操作入門教程》、《php+mysqli數(shù)據(jù)庫程序設(shè)計技巧總結(jié)》、《php面向?qū)ο蟪绦蛟O(shè)計入門教程》、《PHP數(shù)組(Array)操作技巧大全》、《php字符串(string)用法總結(jié)》及《php常見數(shù)據(jù)庫操作技巧匯總》

希望本文所述對大家PHP程序設(shè)計有所幫助。

您可能感興趣的文章:
  • PHP+Mysql樹型結(jié)構(gòu)(無限分類)數(shù)據(jù)庫設(shè)計的2種方式實例
  • php+mysql實現(xiàn)無限分類實例詳解
  • 實現(xiàn)PHP+Mysql無限分類的方法匯總
  • php+mysql數(shù)據(jù)庫實現(xiàn)無限分類的方法
  • php+mysql實現(xiàn)無限級分類 | 樹型顯示分類關(guān)系
  • php+mysql查詢實現(xiàn)無限下級分類樹輸出示例
  • php+mysql不用遞歸實現(xiàn)的無限級分類實例(非遞歸)
  • php+mysql實現(xiàn)無限級分類
  • PHP遞歸寫入MySQL實現(xiàn)無限級分類數(shù)據(jù)操作示例

標(biāo)簽:大理 蚌埠 衢州 萍鄉(xiāng) 棗莊 衡水 江蘇 廣元

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《php+mysql實現(xiàn)的無限分類方法類定義與使用示例》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    青海省| 永兴县| 金华市| 河池市| 双流县| 图片| 景泰县| 达孜县| 自贡市| 普陀区| 西城区| 三台县| 云和县| 华坪县| 阳曲县| 晴隆县| 石泉县| 德化县| 华容县| 博野县| 如皋市| 吉安县| 江川县| 七台河市| 垦利县| 宁津县| 九江县| 长丰县| 扎兰屯市| 黑龙江省| 堆龙德庆县| 邯郸市| 吴忠市| 阳山县| 泰州市| 通海县| 奇台县| 泽州县| 西峡县| 秦安县| 阿瓦提县|