php+mysql实现的无限分类方法类定义与使用示例
吾爱主题
阅读:145
2021-10-15 14:52:00
评论:0
本文实例讲述了php+mysql实现的无限分类方法类定义与使用。分享给大家供大家参考,具体如下:
创建数据库以及表
?1 2 3 4 5 6 7 8 | 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; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 | 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?" rel="external nofollow" +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 . '" rel="external nofollow" >Del</a> <a onclick="mod(' . $id . ')">Edit</a> </li>' ; } ?> </ul> |
希望本文所述对大家PHP程序设计有所帮助。
原文链接:https://www.cnblogs.com/zxf100/p/11139004.html
声明
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。