首页 > php面向对象 > php+mysql数据库无限分类代码

php+mysql数据库无限分类代码

本款php无限分类代码比较完整理包括了数据库是mysql的,有增加、删除、编辑、移动的功能,同时还提供数据库sql表结构.代码如下:

<?php
//连接数据库
$link = mysql_connect('localhost', 'root', '') or die(mysql_error());
mysql_select_db('class', $link) or die(mysql_error());
mysql_query("set names gbk");
//无限分类类库
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_array($results)) {
            $this->setnode($node['id'], $node['f_id'], $node['name']);
        }
    }
    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) {
        //echo "insert into $this->table (`f_id`,`name`) values ('$pid','$name')";exit;
        mysql_query("insert into $this->table (`f_id`,`name`) values ('$pid','$name')", $this->link);
    }
    function modnode($cid, $newname) {
        mysql_query("update $this->table set `name`='$newname' where `id` = $cid", $this->link);
    }
    function delnode($cid) {
        $allchilds = $this->getchilds($cid);
        $sql = '';
        if (emptyempty($allchilds)) {
            $sql = "delete from $this->table where `id` = $cid";
        } else {
            $sql = 'delete from ' . $this->table . ' where `id` in (' . implode(',', $allchilds) . ',' . $cid . ')';
        }
        mysql_query($sql, $this->link);
    }
    function movenode($cid, $topid) {
        mysql_query("update $this->table set `f_id`=$topid where `id` = $cid", $this->link);
    }
}
//函数
function back() {
    echo '<script language="网页特效">window.location.href="news.class.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, '`p_newsclass`');
$op = !emptyempty($_post['op']) ? $_post['op'] : $_get['op'];
if (!emptyempty($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(); //开源代码phprm.com
        
    }
}
$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="" 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="" method="post"> 
	<?=makeselect($category,'who') gt;移动到:<?=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="time.php?op=del&cid='.$id.'">del</a> <a onclick="mod('.$id.')">edit</a> </li>'; 
	} 
	 
	</ul>

用phpmyadmin导入此数据库就ok了,实例代码如下:

-- phpmyadmin sql dump 
	-- version 3.2.4 
	-- http://www.phprm.com 
	-- 
	-- 主机: localhost 
	-- 生成日期: 2010 年 07 月 02 日 03:02 
	-- 服务器版本: 5.1.41 
	-- php 版本: 5.3.1 
	set sql_mode="no_auto_value_on_zero"; 
	 
	/*!40101 set @old_character_set_client=@@character_set_client */; 
	/*!40101 set @old_character_set_results=@@character_set_results */; 
	/*!40101 set @old_collation_connection=@@collation_connection */; 
	/*!40101 set names utf8 */; 
	-- 
	-- 数据库: `class` 
	-- 
	-- -------------------------------------------------------- 
	-- 
	-- 表的结构 `p_newsclass` 
	-- 
	create table if not exists `p_newsclass` ( 
	  `id` int(7) not null auto_increment, 
	  `f_id` int(7) not null, 
	  `name` varchar(255) not null, 
	  primary key (`id`) 
	) engine=innodb  default charset=utf8 auto_increment=10 ; 
	-- 
	-- 转存表中的数据 `p_newsclass` 
	-- 
	insert into `p_newsclass` (`id`, `f_id`, `name`) values 
	(3, 0, '中国'), 
	(4, 3, '福建'), 
	(5, 4, '龙岩市'), 
	(7, 4, '厦门市'), 
	(9, 5, '漳平市'); 
	/*!40101 set character_set_client=@old_character_set_client */; 
	/*!40101 set character_set_results=@old_character_set_results */; 
	/*!40101 set collation_connection=@old_collation_connection */;

               
               

教程网址:http://www.phprm.com/mxdx/fs5423.html

欢迎收藏∩_∩但请保留本文链接。

标签:php+mysql 数据库无限分类

相关文章

发表留言