zoukankan      html  css  js  c++  java
  • 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;
    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>
  • 相关阅读:
    Windows 设置自启动计划任务(非登录启动)
    C# 计算代码执行时间
    使用RabbitMQ做数据接收和处理时,自动关闭
    Winform 连接Web Service 记录
    【转】DataTable 中数据筛选
    更改数据库管理员sa账户密码
    数据库显示可疑的修复方法
    SQL SERVER 2008 删除某个数据库的所有连接进程
    数据库自动备份还原成新库脚本
    关于BindingSource 组件的一些用法
  • 原文地址:https://www.cnblogs.com/zxf100/p/11139004.html
Copyright © 2011-2022 走看看