完整的新闻无限级分类代码,可添加,删除,移动,修改 <?php //连接数据库 $link = mysql_connect( 'localhost' , 'root' , '密码' ) or die (mysql_error()); mysql_select_db( 'sortclass' , $link ); 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_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 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="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 , '`class`' ); $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(); } } $category = $tree ->getchilds(); ?> <style type= "text/css" > body{font-size:12px;} ul{list-style:none;} a{cursor:pointer;} input{ margin-top:8px;} </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> <h3>添加分类</h3> <form action= "class.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= "添加分类" /> </form> <h3>移动分类</h3> <form action= "class.php" method= "post" > <?=makeselect( $category , 'who' )?>移动到:<?=makeselect( $category , 'to' )?> <input type= "hidden" id= "op" name= "op" value= "move" /> <input type= "submit" value= "移动" /> </form> <ul> <?php foreach ( $category as $id ){ echo '<li>' . $tree ->getlayer( $id , '|- ' ). $tree ->getvalue( $id ). ' <a href="class.php?op=del&cid=' . $id . '">del</a> <a onclick="mod(' . $id . ')">edit</a> </li>' ; } ?> </ul>
顶极节点 del edit
|- 1级分类del edit
|- 1级分类 del edit
|- 1级分类 del edit
|- |- 2级分类 del edit
|- |- |- 3级分类 del edit
|- |- |-|- 4级分类 del edit
|- 1级分类 del edit
数据库代码如下:
<! -- 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; --->查看更多关于完整的新闻无限级分类代码,可添加,删除,移动,修的详细内容...