PHP8.1.21版本已发布
vue8.1.21版本已发布
jquery8.1.21版本已发布

博客列表 > 20200115-获得三级树形菜单的笨办法-php培训线上九期班

20200115-获得三级树形菜单的笨办法-php培训线上九期班

邯郸易住宋至刚
邯郸易住宋至刚 原创
2020年01月17日 01:23:29 788浏览

菜单问题

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

一、先从数据库拿到‘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 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议