微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php无限分类方法类

创建数据库以及表:

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;

PHP代码

header("Content-type: text/html; charset=utf-8");

//连接数据库

$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,'顶极节点');

    $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);

  }

}

//函数

function back(){

  echo '<script language="JavaScript">window.location.href="test.PHP?"+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=del&cid='.$id.'">Del</a> <a onclick="mod('.$id.')">Edit</a> </li>';

}

?>

  </ul>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐