以thinkPHP5.0爲例
後臺config.php文件裏配置
//配置文件設置菜單內容屬性 'menu' => [ [ 'name' => '菜單欄1', 'url' => '/admin/index/one', 'status'=> 0, 'sub'=> 0 ], [ 'name' => '菜單欄2', 'url' => '#', 'status'=> 0, 'sub'=>[ [ 'name' => '子菜單欄1', 'url' => '/admin/user/one', 'status'=> 0, ], [ 'name' => '子菜單欄2', 'url' => '/admin/user/two'), 'status'=> 0, ], ] ], [ 'name'=> '菜單欄3', 'url' => '#', 'status'=> 0, 'sub'=>[ [ 'name' => '子菜單欄1', 'url' => '/admin/admin/one', 'status'=> 0, ], [ 'name' => '子菜單欄2', 'url' =>url('/admin/admin/two'), 'status' => 0, ], ] ], [ 'name' => '菜單欄4', 'url' => '/admin/order/one', 'status'=> 0, 'sub'=> 0 ] ]
在項目後臺初始化方法裏base
class Base extends Controller { protected function _initialize() { $request = Request::instance(); if (session('uid') === null) { $this->redirect('Simple/login'); } $menu = Config::get('menu'); //獲取配置文件裏的菜單數據 $clickUrl = $request->path(); //獲取當前請求的地址 $clickUrl = '/' . $clickUrl; $menuData = setMenu($menu, $clickUrl); //對每一個配置項進行狀態設置 $this->assign('menu', $menuData); } }
後臺common.php文件
function setMenu($menuData,$url){ if (!is_array($menuData)){ return false; } foreach ($menuData as $key => $value) { if($value['url'] == '#'){ foreach ($value['sub'] as $k => $v) { if($v['url'] == $url){ $menuData[$key]['status'] = 1; //改變當前訪問的子菜單欄狀態 $menuData[$key]['sub'][$k]['status'] = 1; //改變當前當前的菜單欄狀態 } } } else { $menuData[$key]['status'] = 1; } } return $menuData; }
佈局頁面上view判斷菜單欄及子菜單欄的status狀態
<div class="side-content" id="sidebar-menu"> <ul class="nav-main" id="side-item"> {volist name="menu" id="vo"} {empty name="$vo.sub"} <li> <a href="{$vo.url}" target="_self"><span class="sidebar-mini-hide">{$vo.name}</span></a> </li> {else /} {if condition="$vo.status eq 1"} <li class="dropdown open"> {else /} <li class="dropdown"> {/if} <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="true">{$vo.name} <span class="caret"></span></a> <ul class="dropdown"> {volist name="vo.sub" id="v"} {if condition="$v.status eq 1"} <li class="active"> {else /} <li> {/if} <a href="{$v.url}" target="_self"><span class="sidebar-mini-hide">{$v.name}</span></a> </li> {/volist} </ul> </li> {/empty} {/volist} </ul> </div>