首页 > php代码 > php 无限分类

php 无限分类

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代码  

复制代码

<?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="java script">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();
?>

 

css样式 

复制代码

<style type="text/css"> 
body{font-size:12px;} 
ul{list-style:none;} 
a{cursor:pointer;} 
</style>

 


JS代码

复制代码

<script language="java script"> 
function $(e) {
return document.getElementById(e);
}
function mod(cid) {
$('cid').value = cid;
$('op').value = 'mod';
$('name').style.border = '1px solid red';
}
</script>

 

HTML代码部分 

复制代码

<form action="test.php" method="post"> 
名称:<input type="text" id="name" name="cname" /> 添加到:<?php echo 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"> 
<?php echo makeSelect($category, 'who') ?>移动到:<?php echo 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>


文章地址:http://www.phprm.com/code/f5a39689a80da0a48a7051af9512d62f.html

转载随意^^请带上本文地址!

标签:无限分类

相关文章

发表留言