本文實例講述了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