qhorse
以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>

  

 

分类:

技术点:

相关文章: