本文實例講述了thinkphp實現的聯動菜單功能。分享給大家供大家參考,具體如下:
聯動菜單,首先給你看看前端是怎么寫的:
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
|
<div id= "newcat" > <div class = "all_type" id= "allgoogscat" >所有商品分類</div> <div class = "spfl-warp <?php if(controller_name != 'index' || action_name != 'index'){echo 'hide';} ?> " > <div class = "index-spfl-left" id= "divcatlist" > <ul> < foreach name= "category_menu" key= "one" item= "v" > <li class = "li{$one+1}" > <span><em></em> <a href= "{:u('category/index',array('id'=>$v['category_id'],'level'=>1))}" rel= "external nofollow" >{ $v .category_name}</a> </span> <div class = "div none" > < foreach name= "v['childs']" key= "two" item= "v2" > <dl> <dt> <a href= "{:u('category/index',array('id'=>$v2['category_id'],'level'=>2))}" rel= "external nofollow" >{ $v2 .category_name}</a> </dt> <dd class = "fl" > < foreach name= "v2['childs']" item= "v3" > <a href= "{:u('category/index',array('id'=>$v3['category_id'],'level'=>3))}" rel= "external nofollow" > { $v3 .category_name} </a> </ foreach > </dd> <div class = "cl" ></div> </dl> </ foreach > </div> </li> </ foreach > </ul> </div> </div> </div> <script type= "text/javascript" > <?php if (controller_name != 'index' || action_name != 'index' ){ ?> //商品分類鼠標滑過 function spflhover() { $( ".index-spfl-left ul li" ).live( "mouseover" , function () { $(this).addclass( "active" ).siblings().removeclass( "active" ); $( ".index-spfl-left" ).find( ".div" ).hide(); $(this).find( ".div" ).show(); }).live( "mouseout" , function () { $(this).removeclass( "active" ); $( ".index-spfl-left" ).find( ".div" ).hide(); $(this).find( ".div" ).hide(); }); //鼠標滑過分類顯示 $( "#newcat" ).mouseover( function () { $( ".spfl-warp" ).show(); }).mouseout( function () { if ($( "#ismain" ).val() == "1" ) { $( ".spfl-warp" ).show(); } else { $( ".spfl-warp" ).hide(); } }) } spflhover(); <?php } ?> </script> |
看到沒有,其實里面的一級菜單對應二級菜單都是在同一個li里面的,li里面的二級三級呢,都是放在dl的dt和dd標簽里面;
然后現在我們看看取出來的category_menu,什么樣的數據:
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
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
|
array ( [0] => array ( [category_id] => 84 [category_name] => 家裝主材 [parent_id] => 0 [listorder] => 200 [display] => 1 [childs] => array ( [0] => array ( [category_id] => 85 [category_name] => 廚衛 [parent_id] => 84 [listorder] => 200 [display] => 1 [childs] => array ( [0] => array ( [category_id] => 99 [category_name] => 廚盆/水槽 [parent_id] => 85 [listorder] => 200 [display] => 1 [childs] => array ( ) ) [1] => array ( [category_id] => 98 [category_name] => 衛浴配件 [parent_id] => 85 [listorder] => 200 [display] => 1 [childs] => array ( ) ) [2] => array ( [category_id] => 97 [category_name] => 衛浴龍頭 [parent_id] => 85 [listorder] => 200 [display] => 1 [childs] => array ( ) ) [3] => array ( [category_id] => 96 [category_name] => 龍頭 [parent_id] => 85 [listorder] => 200 [display] => 1 [childs] => array ( ) ) [4] => array ( [category_id] => 95 [category_name] => 淋浴房 [parent_id] => 85 [listorder] => 200 [display] => 1 [childs] => array ( ) ) [5] => array ( [category_id] => 94 [category_name] => 智能坐便器 [parent_id] => 85 [listorder] => 200 [display] => 1 [childs] => array ( ) ) [6] => array ( [category_id] => 93 [category_name] => 浴室柜 [parent_id] => 85 [listorder] => 200 [display] => 1 [childs] => array ( ) ) [7] => array ( [category_id] => 92 [category_name] => 坐便器 [parent_id] => 85 [listorder] => 200 [display] => 1 [childs] => array ( ) ) [8] => array ( [category_id] => 91 [category_name] => 浴霸 [parent_id] => 85 [listorder] => 200 [display] => 1 [childs] => array ( ) ) [9] => array ( [category_id] => 90 [category_name] => 地漏 [parent_id] => 85 [listorder] => 200 [display] => 1 [childs] => array ( ) ) [10] => array ( [category_id] => 89 [category_name] => 坐便器蓋板 [parent_id] => 85 [listorder] => 200 [display] => 1 [childs] => array ( ) ) [11] => array ( [category_id] => 88 [category_name] => 洗面盆 [parent_id] => 85 [listorder] => 200 [display] => 1 [childs] => array ( ) ) [12] => array ( [category_id] => 87 [category_name] => 角閥 [parent_id] => 85 [listorder] => 200 [display] => 1 [childs] => array ( ) ) [13] => array ( [category_id] => 100 [category_name] => 衛浴五金 [parent_id] => 85 [listorder] => 200 [display] => 1 [childs] => array ( ) ) [14] => array ( [category_id] => 101 [category_name] => 廚房掛件/配件 [parent_id] => 85 [listorder] => 200 [display] => 1 [childs] => array ( ) ) [15] => array ( [category_id] => 86 [category_name] => 淋浴花灑 [parent_id] => 85 [listorder] => 200 [display] => 1 [childs] => array ( ) ) ) ) [1] => array ( [category_id] => 126 [category_name] => 墻紙 [parent_id] => 84 [listorder] => 200 [display] => 1 [childs] => array ( [0] => array ( [category_id] => 130 [category_name] => 3d墻紙 [parent_id] => 126 [listorder] => 200 [display] => 1 [childs] => array ( ) ) [1] => array ( [category_id] => 129 [category_name] => 純紙墻紙 [parent_id] => 126 [listorder] => 200 [display] => 1 [childs] => array ( ) ) [2] => array ( [category_id] => 128 [category_name] => pvc墻紙 [parent_id] => 126 [listorder] => 200 [display] => 1 [childs] => array ( ) ) |
然后,數據表是怎么樣的數據呢:
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
|
array ( [0] => array ( [category_id] => 211 [category_name] => 鞋柜 [parent_id] => 31 [listorder] => 200 [display] => 1 ) [1] => array ( [category_id] => 194 [category_name] => 相框/照片墻 [parent_id] => 189 [listorder] => 200 [display] => 1 ) [2] => array ( [category_id] => 193 [category_name] => 簾藝隔斷 [parent_id] => 189 [listorder] => 200 [display] => 1 ) [3] => array ( [category_id] => 192 [category_name] => 沙發墊套/椅墊 [parent_id] => 189 [listorder] => 200 [display] => 1 ) [4] => array ( [category_id] => 191 [category_name] => 地毯地墊 [parent_id] => 189 [listorder] => 200 [display] => 1 ) [5] => array ( [category_id] => 190 [category_name] => 桌布/罩件 [parent_id] => 189 [listorder] => 200 [display] => 1 ) |
數據表數據是醬紫的;
然后,你能寫出那個處理數組的方法嗎,給你原數據,然后你用迭代處理成你想要的數據,不用太多,6行代碼左右,你ok?
代碼拷貝多了,人也就變傻了,知不知道???
1
2
3
4
5
6
7
8
9
10
11
12
13
|
//把欄目分組,以多維數組形式 public function group_category( $id = 0) { $list = $this ->where( 'display = 1' )->order( 'listorder asc' )->select(); $tmp = array (); foreach ( $list as $v ){ if ( $v [ 'parent_id' ] == $id ){ $v [ 'childs' ] = $this ->group_category( $v [ 'category_id' ]); $tmp [] = $v ; } } return $tmp ; } |
為什么不把sql語句放在外面作為參數傳遞進去函數groud_category函數呢?這樣就不用老是查數據庫啊。
無非也就是將父id為0開始查詢,然后對其子欄目的id在做為父id進行查詢,查詢出屬于其id的子欄目
希望本文所述對大家基于thinkphp框架的php程序設計有所幫助。