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


Posted in PHP onMay 05, 2017

本文实例讲述了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框架的PHP程序设计有所帮助。

PHP 相关文章推荐
配置最新的PHP加MYSQL服务器
Oct 09 PHP
PHP动态变静态原理
Nov 25 PHP
php 删除cookie和浏览器重定向
Mar 16 PHP
PHP无敌近乎加密方式!
Jul 17 PHP
php shell超强免杀、减少体积工具实现代码
Oct 16 PHP
用PHP提取中英文词语以及数字的首字母的方法介绍
Apr 23 PHP
PHP错误Allowed memory size of 67108864 bytes exhausted的3种解决办法
Jul 28 PHP
php获取URL中带#号等特殊符号参数的解决方法
Sep 02 PHP
php相对当前文件include其它文件的方法
Mar 13 PHP
jquery获取多个checkbox的值异步提交给php的方法
Jun 24 PHP
为你总结一些php系统类函数
Oct 21 PHP
PHP根据key删除数组中指定的元素
Feb 28 PHP
thinkPHP实现的省市区三级联动功能示例
May 05 #PHP
php str_replace替换指定次数的方法详解
May 05 #PHP
老生常谈ThinkPHP中的行为扩展和插件(推荐)
May 05 #PHP
PHP curl 或 file_get_contents 获取需要授权页面的方法
May 05 #PHP
php 浮点数比较方法详解
May 05 #PHP
PHP删除二维数组中相同元素及数组重复值的方法示例
May 05 #PHP
完美解决在ThinkPHP控制器中命名空间的问题
May 05 #PHP
You might like
PHP 巧用数组降低程序的时间复杂度
2010/01/01 PHP
php UTF-8、Unicode和BOM问题
2010/05/18 PHP
常用的PHP数据库操作方法(MYSQL版)
2011/06/08 PHP
解析php类的注册与自动加载
2013/07/05 PHP
PHP的MVC模式实现原理分析(一相简单的MVC框架范例)
2014/04/29 PHP
PHP中文乱码解决方案
2015/03/05 PHP
基于PHP代码实现中奖概率算法可用于刮刮卡、大转盘等抽奖算法
2015/12/20 PHP
PHP实现数组转JSon和JSon转数组的方法示例
2018/06/14 PHP
当前页禁止复制粘贴截屏代码小集
2013/07/24 Javascript
js 文本滚动效果的实例代码
2013/08/17 Javascript
jQuery入门之层次选择器实例简析
2015/12/11 Javascript
超链接怎么正确调用javascript函数
2016/05/23 Javascript
Javascript中关于Array.filter()的妙用详解
2016/12/04 Javascript
javascript获取以及设置光标位置
2017/02/16 Javascript
JS 学习总结之正则表达式的懒惰性和贪婪性
2017/07/03 Javascript
微信小程序实现tab和swiper切换结合效果
2020/07/17 Javascript
iview table render集成switch开关的实例
2018/03/14 Javascript
Webpack中雪碧图插件使用详解
2018/05/25 Javascript
深入分析jQuery.one() 函数
2020/06/03 jQuery
python中文编码问题小结
2014/09/28 Python
python简单实现旋转图片的方法
2015/05/30 Python
Scrapy框架CrawlSpiders的介绍以及使用详解
2017/11/29 Python
python简单操作excle的方法
2018/09/12 Python
Python3实现对列表按元组指定列进行排序的方法分析
2018/12/22 Python
Python基于内置库pytesseract实现图片验证码识别功能
2020/02/24 Python
关于Python Tkinter Button控件command传参问题的解决方式
2020/03/04 Python
如何使用css3实现一个类在线直播的队列动画的示例代码
2020/06/17 HTML / CSS
销售所有的狗狗产品:Dog.com
2016/10/13 全球购物
《画风》教学反思
2014/04/16 职场文书
家长对学生的评语
2014/04/18 职场文书
预备党员自我批评思想汇报
2014/10/10 职场文书
2016年第32个教师节致辞
2015/11/26 职场文书
golang中的空slice案例
2021/04/27 Golang
为什么mysql字段要使用NOT NULL
2021/05/13 MySQL
Python实现单例模式的5种方法
2021/06/15 Python
Pygame Time时间控制的具体使用详解
2021/11/17 Python