码迷,mamicode.com
首页 > Web开发 > 详细

ThinkPHP实现联动菜单;

时间:2016-08-14 09:07:31      阅读:309      评论:0      收藏:0      [点我收藏+]

标签:

联动菜单,首先给你看看前端是怎么写的:

 1 <div id="newCat">
 2     <div class="all_type" id="allGoogsCat">所有商品分类</div>
 3 
 4     <div class="spfl-warp <?php if(CONTROLLER_NAME != ‘Index‘ || ACTION_NAME != ‘index‘){echo ‘hide‘;} ?> ">
 5         <div class="index-spfl-left" id="divCatList">
 6             <ul>
 7                 <foreach name="category_menu" key="one" item="v">
 8                 <li class="li{$one+1}">
 9                     <span><em></em>
10                         <a href="{:U(‘Category/index‘,array(‘id‘=>$v[‘category_id‘],‘level‘=>1))}">{$v.category_name}</a>
11                     </span>
12                     <div class="div none">
13                         <foreach name="v[‘childs‘]" key="two" item="v2">
14                             <dl>
15                                 <dt>
16                                     <a href="{:U(‘Category/index‘,array(‘id‘=>$v2[‘category_id‘],‘level‘=>2))}">{$v2.category_name}</a>
17                                 </dt>
18                                 <dd class="fl">
19                                     <foreach name="v2[‘childs‘]" item="v3">
20                                         <a href="{:U(‘Category/index‘,array(‘id‘=>$v3[‘category_id‘],‘level‘=>3))}">
21                                             {$v3.category_name}
22                                         </a>
23                                     </foreach>
24                                 </dd>
25                                 <div class="cl"></div>
26                             </dl>
27                         </foreach>
28                     </div>
29                 </li>
30             </foreach>
31         </ul>
32     </div>
33     </div>
34 </div>
35 
36 <script type="text/javascript">
37 <?php if(CONTROLLER_NAME != Index || ACTION_NAME != index){ ?>
38     //商品分类鼠标滑过
39     function spflHover() {
40         $(".index-spfl-left ul li").live("mouseover", function () {
41             $(this).addClass("active").siblings().removeClass("active");
42             $(".index-spfl-left").find(".div").hide();
43             $(this).find(".div").show();
44         }).live("mouseout", function () {
45             $(this).removeClass("active");
46             $(".index-spfl-left").find(".div").hide();
47             $(this).find(".div").hide();
48         });
49         //鼠标滑过分类显示
50         $("#newCat").mouseover(function () {
51             $(".spfl-warp").show();
52         }).mouseout(function () {
53             if ($("#ismain").val() == "1") {
54                 $(".spfl-warp").show();
55             } else {
56                 $(".spfl-warp").hide();
57             }
58         })
59     }
60     spflHover();
61 <?php } ?>
62 </script>

看到没有,其实里面的一级菜单对应二级菜单都是在同一个li里面的,li里面的二级三级呢,都是放在dl的dt和dd标签里面;

然后现在我们看看取出来的category_menu,什么样的数据:

  1 Array
  2 (
  3     [0] => Array
  4         (
  5             [category_id] => 84
  6             [category_name] => 家装主材
  7             [parent_id] => 0
  8             [listorder] => 200
  9             [display] => 1
 10             [childs] => Array
 11                 (
 12                     [0] => Array
 13                         (
 14                             [category_id] => 85
 15                             [category_name] => 厨卫
 16                             [parent_id] => 84
 17                             [listorder] => 200
 18                             [display] => 1
 19                             [childs] => Array
 20                                 (
 21                                     [0] => Array
 22                                         (
 23                                             [category_id] => 99
 24                                             [category_name] => 厨盆/水槽
 25                                             [parent_id] => 85
 26                                             [listorder] => 200
 27                                             [display] => 1
 28                                             [childs] => Array
 29                                                 (
 30                                                 )
 31 
 32                                         )
 33 
 34                                     [1] => Array
 35                                         (
 36                                             [category_id] => 98
 37                                             [category_name] => 卫浴配件
 38                                             [parent_id] => 85
 39                                             [listorder] => 200
 40                                             [display] => 1
 41                                             [childs] => Array
 42                                                 (
 43                                                 )
 44 
 45                                         )
 46 
 47                                     [2] => Array
 48                                         (
 49                                             [category_id] => 97
 50                                             [category_name] => 卫浴龙头
 51                                             [parent_id] => 85
 52                                             [listorder] => 200
 53                                             [display] => 1
 54                                             [childs] => Array
 55                                                 (
 56                                                 )
 57 
 58                                         )
 59 
 60                                     [3] => Array
 61                                         (
 62                                             [category_id] => 96
 63                                             [category_name] => 龙头
 64                                             [parent_id] => 85
 65                                             [listorder] => 200
 66                                             [display] => 1
 67                                             [childs] => Array
 68                                                 (
 69                                                 )
 70 
 71                                         )
 72 
 73                                     [4] => Array
 74                                         (
 75                                             [category_id] => 95
 76                                             [category_name] => 淋浴房
 77                                             [parent_id] => 85
 78                                             [listorder] => 200
 79                                             [display] => 1
 80                                             [childs] => Array
 81                                                 (
 82                                                 )
 83 
 84                                         )
 85 
 86                                     [5] => Array
 87                                         (
 88                                             [category_id] => 94
 89                                             [category_name] => 智能坐便器
 90                                             [parent_id] => 85
 91                                             [listorder] => 200
 92                                             [display] => 1
 93                                             [childs] => Array
 94                                                 (
 95                                                 )
 96 
 97                                         )
 98 
 99                                     [6] => Array
100                                         (
101                                             [category_id] => 93
102                                             [category_name] => 浴室柜
103                                             [parent_id] => 85
104                                             [listorder] => 200
105                                             [display] => 1
106                                             [childs] => Array
107                                                 (
108                                                 )
109 
110                                         )
111 
112                                     [7] => Array
113                                         (
114                                             [category_id] => 92
115                                             [category_name] => 坐便器
116                                             [parent_id] => 85
117                                             [listorder] => 200
118                                             [display] => 1
119                                             [childs] => Array
120                                                 (
121                                                 )
122 
123                                         )
124 
125                                     [8] => Array
126                                         (
127                                             [category_id] => 91
128                                             [category_name] => 浴霸
129                                             [parent_id] => 85
130                                             [listorder] => 200
131                                             [display] => 1
132                                             [childs] => Array
133                                                 (
134                                                 )
135 
136                                         )
137 
138                                     [9] => Array
139                                         (
140                                             [category_id] => 90
141                                             [category_name] => 地漏
142                                             [parent_id] => 85
143                                             [listorder] => 200
144                                             [display] => 1
145                                             [childs] => Array
146                                                 (
147                                                 )
148 
149                                         )
150 
151                                     [10] => Array
152                                         (
153                                             [category_id] => 89
154                                             [category_name] => 坐便器盖板
155                                             [parent_id] => 85
156                                             [listorder] => 200
157                                             [display] => 1
158                                             [childs] => Array
159                                                 (
160                                                 )
161 
162                                         )
163 
164                                     [11] => Array
165                                         (
166                                             [category_id] => 88
167                                             [category_name] => 洗面盆
168                                             [parent_id] => 85
169                                             [listorder] => 200
170                                             [display] => 1
171                                             [childs] => Array
172                                                 (
173                                                 )
174 
175                                         )
176 
177                                     [12] => Array
178                                         (
179                                             [category_id] => 87
180                                             [category_name] => 角阀
181                                             [parent_id] => 85
182                                             [listorder] => 200
183                                             [display] => 1
184                                             [childs] => Array
185                                                 (
186                                                 )
187 
188                                         )
189 
190                                     [13] => Array
191                                         (
192                                             [category_id] => 100
193                                             [category_name] => 卫浴五金
194                                             [parent_id] => 85
195                                             [listorder] => 200
196                                             [display] => 1
197                                             [childs] => Array
198                                                 (
199                                                 )
200 
201                                         )
202 
203                                     [14] => Array
204                                         (
205                                             [category_id] => 101
206                                             [category_name] => 厨房挂件/配件
207                                             [parent_id] => 85
208                                             [listorder] => 200
209                                             [display] => 1
210                                             [childs] => Array
211                                                 (
212                                                 )
213 
214                                         )
215 
216                                     [15] => Array
217                                         (
218                                             [category_id] => 86
219                                             [category_name] => 淋浴花洒
220                                             [parent_id] => 85
221                                             [listorder] => 200
222                                             [display] => 1
223                                             [childs] => Array
224                                                 (
225                                                 )
226 
227                                         )
228 
229                                 )
230 
231                         )
232 
233                     [1] => Array
234                         (
235                             [category_id] => 126
236                             [category_name] => 墙纸
237                             [parent_id] => 84
238                             [listorder] => 200
239                             [display] => 1
240                             [childs] => Array
241                                 (
242                                     [0] => Array
243                                         (
244                                             [category_id] => 130
245                                             [category_name] => 3D墙纸
246                                             [parent_id] => 126
247                                             [listorder] => 200
248                                             [display] => 1
249                                             [childs] => Array
250                                                 (
251                                                 )
252 
253                                         )
254 
255                                     [1] => Array
256                                         (
257                                             [category_id] => 129
258                                             [category_name] => 纯纸墙纸
259                                             [parent_id] => 126
260                                             [listorder] => 200
261                                             [display] => 1
262                                             [childs] => Array
263                                                 (
264                                                 )
265 
266                                         )
267 
268                                     [2] => Array
269                                         (
270                                             [category_id] => 128
271                                             [category_name] => PVC墙纸
272                                             [parent_id] => 126
273                                             [listorder] => 200
274                                             [display] => 1
275                                             [childs] => Array
276                                                 (
277                                                 )
278 
279                                         )

然后,数据表是怎么样的数据呢:

 1 Array
 2 (
 3     [0] => Array
 4         (
 5             [category_id] => 211
 6             [category_name] => 鞋柜
 7             [parent_id] => 31
 8             [listorder] => 200
 9             [display] => 1
10         )
11 
12     [1] => Array
13         (
14             [category_id] => 194
15             [category_name] => 相框/照片墙
16             [parent_id] => 189
17             [listorder] => 200
18             [display] => 1
19         )
20 
21     [2] => Array
22         (
23             [category_id] => 193
24             [category_name] => 帘艺隔断
25             [parent_id] => 189
26             [listorder] => 200
27             [display] => 1
28         )
29 
30     [3] => Array
31         (
32             [category_id] => 192
33             [category_name] => 沙发垫套/椅垫
34             [parent_id] => 189
35             [listorder] => 200
36             [display] => 1
37         )
38 
39     [4] => Array
40         (
41             [category_id] => 191
42             [category_name] => 地毯地垫
43             [parent_id] => 189
44             [listorder] => 200
45             [display] => 1
46         )
47 
48     [5] => Array
49         (
50             [category_id] => 190
51             [category_name] => 桌布/罩件
52             [parent_id] => 189
53             [listorder] => 200
54             [display] => 1
55         )

数据表数据是酱紫的;

然后,你能写出那个处理数组的方法吗,给你原数据,然后你用迭代处理成你想要的数据,不用太多,6行代码左右,你OK?

代码拷贝多了,人也就变傻了,知不知道???

 1 //把栏目分组,以多维数组形式
 2     public function group_category($id = 0)
 3     {
 4         $list=$this->where(‘display = 1‘)->order(‘listorder asc‘)->select();
 5         $tmp = array();
 6         foreach($list as $v){
 7             if($v[‘parent_id‘] == $id){
 8                 $v[‘childs‘] = $this->group_category($v[‘category_id‘]);
 9                 $tmp[] = $v;
10             }
11         }
12         return $tmp;
13     }

为什么不把SQL语句放在外面作为参数传递进去函数groud_category函数呢?这样就不用老是查数据库啊。

无非也就是将父ID为0开始查询,然后对其子栏目的id在做为父ID进行查询,查询出属于其id的子栏目、、、

ThinkPHP实现联动菜单;

标签:

原文地址:http://www.cnblogs.com/haveadream435/p/5769478.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!