如图:效果
控制器的写法:我是在公共构造函数里面写的
$authRule = db('auth_rule')->where('level<2')->select(); level 是级别,我的数据库中
0是顶级,1是二级, 目前只是想二级联动输出,所以小于2
$menus = array();
foreach ($authRule as $key=>$val){
$authRule[$key]['name'] = url($val['name']); //重新组装name值
if($val['pid']==0){ //判断是否是顶级菜单
$menus[] = $val;
}
}
foreach ($menus as $k=>$v){
foreach ($authRule as $kk=>$vv){
if($v['id']==$vv['pid']){
$menus[$k]['children'][] = $vv;
}
}
}
// $this->assign('menus', json_encode($menus,true)); //如果要在JS中接收的话要做这样的处理, 这里我没有在JS中接收,所以注释
$this->assign('menus',$menus);
前端模板页面的接收:
<div class="page-sidebar" id="sidebar">
<ul class="nav sidebar-menu">
{volist name="menus" id="vo"} //第一次循环模板:获取顶级 菜单
<!--Dashboard-->
<li>
<a href="#" class="menu-dropdown">
<i class="menu-icon fa fa-user"></i>
<span class="menu-text">{$vo.title}</span>
<i class="menu-expand"></i>
</a>
//判断是否存在子级菜单,如果要拓展孙级别菜单的话同种做法
{if isset($vo['children'])}
<ul class="submenu">
{volist name="$vo['children']" id="no"} //循环输出子级菜单
<li>
<a href="{$no.name}"> //跳转
<span class="menu-text">
{$no.title} //子级菜单名字
</span>
<i class="menu-expand"></i>
</a>
</li>
{/volist}
</ul>
{/if}
</li>
{/volist}
</ul>
<!-- /Sidebar Menu -->
</div>
数据库的表