博主信息
博文 53
粉丝 3
评论 0
访问量 66956
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
20200115-获得三级树形菜单的笨办法-php培训线上九期班
邯郸易住宋至刚
原创
1050人浏览过

菜单问题

在涉及到菜单管理的时候,从数据库拿到的数据都是平行的,都是相同的一条一条的记录,拿到的数据并没有分级,显然这些数据是需要处理的,处理成分组分级别的菜单。用笨办法来完成这项工作可以分为以下几步:

一、先从数据库拿到‘pid’为0的数据:

  1. $menus = DB::table('xpcms_admin_menu')
  2. ->where(['status'=>0,'ishidden'=>0,'pid'=>0])->cates('mid');

二、遍历$menus

  1. foreach ($menus as $key => $menu){
  2. //从数据库中拿到'pid'为>$menu['mid']的数据
  3. $children = DB::table('xpcms_admin_menu')
  4. ->where(['status'=>0,'ishidden'=>0,'pid'=>$menu['mid']])->cates('mid');
  5. //然后把$children放入$menus[$key]['children']数组当中,得到二级分类;
  6. $menus[$key]['children'] = $children;

三、再对$children进行遍历,得到三级菜单

  1. foreach ($children as $k => $child){
  2. $ch = DB::table('xpcms_admin_menu') ->where(['status'=>0,'ishidden'=>0,'pid'=>$child['mid']])->cates('mid');
  3. $menus[$key]['children'][$k]['children'] = $ch;
  4. }

完整代码

  1. $menus = DB::table('xpcms_admin_menu')
  2. ->where(['status'=>0,'ishidden'=>0,'pid'=>0])->cates('mid');
  3. foreach ($menus as $key => $menu){
  4. $children = DB::table('xpcms_admin_menu') ->where(['status'=>0,'ishidden'=>0,'pid'=>$menu['mid']])->cates('mid');
  5. $menus[$key]['children'] = $children;
  6. foreach ($children as $k => $child){
  7. $ch = DB::table('xpcms_admin_menu') ->where(['status'=>0,'ishidden'=>0,'pid'=>$child['mid']])->cates('mid');
  8. $menus[$key]['children'][$k]['children'] = $ch;
  9. }
  10. }

结果

前端三级循环代码 <dl class="permission-list">

  1. @foreach($menus as $menu)
  2. <dt>
  3. <label>
  4. <input type="checkbox" value="{{$menu['mid']}}" name="menu[{{$menu['mid']}}]" id="user-Character-0">
  5. {{$menu['title']}}</label>
  6. </dt>
  7. <dd>
  8. @if(isset($menu['children']) && $menu['children'])
  9. <dl class="cl permission-list2">
  10. @foreach($menu['children'] as $children)
  11. <dt>
  12. <label class="">
  13. <input type="checkbox" value="{{$children['mid']}}" name="menu[{{$children['mid']}}]" id="user-Character-0-0">
  14. {{$children['title']}}</label>
  15. </dt>
  16. @if(isset($children['children']) && $children['children'])
  17. @foreach($children['children'] as $child)
  18. <dd>
  19. <label class="">
  20. <input type="checkbox" value="{{$child['mid']}}" name="menu[{{$child['mid']}}]" id="user-Character-0-0-0">
  21. {{$child['title']}}</label>
  22. </dd>
  23. @endforeach
  24. @endif
  25. @endforeach
  26. </dl>
  27. @endif
  28. </dd>
  29. @endforeach
  30. </dl>

前端渲染结果

这是创建管理权限组时的选项菜单,并不是真正的菜单,要想变成真正的菜单,还要将多级菜单处理成二级菜单。

需要特别注意的是

第二次遍历的时候,费了一些周折,一开始按照第一次遍历的思路,写成了foreach ($menus[$key][‘children’] as $k => $child){},一直得不到想要的结果,各种想,最终还算是碰对了。也算幸运,但是这是一种没有基础的人的笨办法,不值得推荐,也不需要采用,只是记录了我的一些摸索。

本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学