php教程

超轻量级php框架startmvc

thinkPHP实现的联动菜单功能详解

更新时间:2020-03-19 17:57:51 作者:startmvc
本文实例讲述了thinkPHP实现的联动菜单功能。分享给大家供大家参考,具体如下:联动菜单

本文实例讲述了thinkPHP实现的联动菜单功能。分享给大家供大家参考,具体如下:

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


<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,什么样的数据:


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
 (
 )
 )

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


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?

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


//把栏目分组,以多维数组形式
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 联动菜单