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

5年以前  |  阅读数:381 次  |  编程语言:PHP 

本文实例讲述了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相关内容感兴趣的读者可查看本站专题:《ThinkPHP入门教程》、《thinkPHP模板操作技巧总结》、《ThinkPHP常用方法总结》、《codeigniter入门教程》、《CI(CodeIgniter)框架进阶教程》、《Zend FrameWork框架入门教程》及《PHP模板技术总结》。

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

 相关文章:
PHP分页显示制作详细讲解
SSH 登录失败:Host key verification failed
获取IMSI
将二进制数据转为16进制以便显示
获取IMEI
文件下载
贪吃蛇
双位运算符
PHP自定义函数获取搜索引擎来源关键字的方法
Java生成UUID
发送邮件
年的日历图
提取后缀名
在Zeus Web Server中安装PHP语言支持
让你成为最历害的git提交人
Yii2汉字转拼音类的实例代码
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Python 2与Python 3版本和编码的对比
php封装的page分页类完整实例