本款php无限分类代码比较完整理包括了数据库是mysql的,有增加、删除、编辑、移动的功能,同时还提供数据库sql表结构.代码如下:
//连接数据库 $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 ( empty empty ( $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 = ! empty empty ( $_post [ 'op' ]) ? $_post [ 'op' ] : $_get [ 'op' ]; if (! empty 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(); //开源代码phpfensi测试数据 } } $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://HdhCmsTestphpfensi测试数据 -- -- 主机: 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 */;查看更多关于php+mysql数据库无限分类代码的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://haodehen.cn/did29600