解决yii2左侧菜单子级无法高亮问题的方法


Posted in PHP onMay 08, 2016

我们先来看看具体问题。
添加角色是属于角色这个菜单的,如何在执行添加角色这个操作时让角色这个菜单处于选中状态呢?
adminlte左侧导航的Create,View等action不能定位到index的模块(左侧二级导航不能展开定位)
如果你是按照我们上文的教程来的,那接下来所要说明的问题应该不是问题,先来看看我们当时是怎么处理左侧菜单menu的

use mdm\admin\components\MenuHelper; 
<?php 
$callback = function($menu){ 
 //鉴于篇幅有限,这里的代码省略,源码见于原文
}; 
//这里我们对一开始写的菜单menu进行了优化
echo dmstr\widgets\Menu::widget( [ 
 'options' => ['class' => 'sidebar-menu'], 
 'items' => MenuHelper::getAssignedMenu(Yii::$app->user->id, null, $callback), 
] ); ?>

看到这里,我们不妨打开文件dmstr\widgets\Menu看看这里是怎么实现左侧菜单选中这一困扰众多同学的问题。

protected function isItemActive($item)
{
 if (isset($item['url']) && is_array($item['url']) && isset($item['url'][0])) {
  //......
  if ($arrayRoute[0] !== $arrayThisRoute[0]) {
   return false;
  }
  if (isset($arrayRoute[1]) && $arrayRoute[1] !== $arrayThisRoute[1]) {
   return false;
  }
  if (isset($arrayRoute[2]) && $arrayRoute[2] !== $arrayThisRoute[2]) {
   return false;
  }
  //......
  return true;
 }
 return false;
}

看吧,看上面的代码,也就是说左侧菜单激活的情况是当前路由完全等于菜单路由时菜单才进行激活。

鉴于我们一开始谈到的不少小伙伴疑惑的两个问题,我们这里只需要稍稍调整下代码,判断控制到controller而非action即可,但是源码文件我们又不能修改,怎么办好呢?天热,凉拌。

这里我们拷贝dmstr\widgets\Menu.php文件到backend\components\Menu.php,然后按照下面的方法修改isItemActive方法即可

protected function isItemActive($item)
{
 if (isset($item['url']) && is_array($item['url']) && isset($item['url'][0])) {
  
  //......


  //改写了路由的规则,是否高亮判断到controller而非action
  $routeCount = count($arrayRoute);
  if ($routeCount == 2) {
   if ($arrayRoute[0] !== $arrayThisRoute[0]) {
    return false;
   }
  } elseif ($routeCount == 3) {
   if ($arrayRoute[0] !== $arrayThisRoute[0]) {
    return false;
   }
   if (isset($arrayRoute[1]) && $arrayRoute[1] !== $arrayThisRoute[1]) {
    return false;
   }
  } else {
   return false;
  }


  // if ($arrayRoute[0] !== $arrayThisRoute[0]) {
  //  return false;
  // }
  // if (isset($arrayRoute[1]) && $arrayRoute[1] !== $arrayThisRoute[1]) {
  //  return false;
  // }
  // if (isset($arrayRoute[2]) && $arrayRoute[2] !== $arrayThisRoute[2]) {
  //  return false;
  // }
  
  //......
  
  return true;
 }
 return false;
}

大功告成,现在我们左侧的菜单引用的Menu文件修改其指向到backend\components\Menu

use backend\components\Menu;
echo Menu::widget([
 'options' => ['class' => 'sidebar-menu'],
 'items' => MenuHelper::getAssignedMenu(Yii::$app->user->id, null, $callback),
]);

快去试试看我们的问题解决没有吧。

PHP 相关文章推荐
Base64在线编码解码实现代码 演示与下载
Jan 08 PHP
基于php缓存的详解
May 15 PHP
PHP多例模式介绍
Jun 24 PHP
PHP判断远程图片或文件是否存在的实现代码
Feb 20 PHP
让CodeIgniter数据库缓存自动过期的处理的方法
Jun 12 PHP
ThinkPHP3.1新特性之内容解析输出详解
Jun 19 PHP
PHP使用GETDATE获取当前日期时间作为一个关联数组的方法
Mar 19 PHP
深入理解PHP之OpCode原理详解
Jun 01 PHP
PHP使用PDO抽象层获取查询结果的方法示例
May 10 PHP
php实现每日签到功能
Nov 29 PHP
PHP如何通过表单直接提交大文件详解
Jan 08 PHP
php libevent 功能与使用方法详解
Mar 04 PHP
php面向对象编程self和static的区别
May 08 #PHP
Laravel与CI框架中截取字符串函数
May 08 #PHP
PHP框架性能测试报告
May 08 #PHP
Thinkphp单字母函数使用指南
May 08 #PHP
CentOS下搭建PHP环境与WordPress博客程序的全流程总结
May 07 #PHP
PHP+Ajax+JS实现多图上传
May 07 #PHP
php实现图片上传、剪切功能
May 07 #PHP
You might like
不用iconv库的gb2312与utf-8的互换函数
2006/10/09 PHP
php产生随机数的两种方法实例代码 输出随机IP
2011/04/08 PHP
记录mysql性能查询过程的使用方法
2013/05/02 PHP
php中url传递中文字符,特殊危险字符的解决方法
2013/08/17 PHP
检测codeigniter脚本消耗内存情况的方法
2015/03/21 PHP
基于php实现七牛抓取远程图片
2015/12/01 PHP
详解HTTP Cookie状态管理机制
2016/01/14 PHP
PHP中模拟链表和链表的基本操作示例
2016/02/27 PHP
Laravel搭建后台登录系统步骤详解
2016/07/26 PHP
PHP 配置后台登录以及模板引入
2017/01/24 PHP
Laravel框架自定义公共函数的引入操作示例
2019/04/16 PHP
jQuery简单实现网页选项卡特效
2014/11/24 Javascript
node.js cookie-parser之parser.js
2016/06/06 Javascript
Bootstrap CSS组件之导航(nav)
2016/12/17 Javascript
深入了解JavaScript的逻辑运算符(与、或)
2016/12/20 Javascript
Vue2.0基于vue-cli+webpack父子组件通信(实例讲解)
2017/09/14 Javascript
Javascript删除数组里的某个元素
2019/02/28 Javascript
微信小程序设置滚动条过程详解
2019/07/25 Javascript
[02:40]DOTA2英雄基础教程 巨牙海民
2013/12/23 DOTA
简单介绍Python中的struct模块
2015/04/28 Python
教大家使用Python SqlAlchemy
2016/02/12 Python
Python3利用SMTP协议发送E-mail电子邮件的方法
2017/09/30 Python
详解python 模拟豆瓣登录(豆瓣6.0)
2019/04/18 Python
使用python代码进行身份证号校验的实现示例
2019/11/21 Python
Jmeter HTTPS接口测试证书导入过程图解
2020/07/22 Python
Linux Interview Questions For software testers
2013/05/17 面试题
C++程序员求职信范文
2014/04/14 职场文书
机关搬迁方案
2014/05/18 职场文书
金融系毕业生自荐书
2014/07/08 职场文书
个人作风建设心得体会
2014/10/22 职场文书
北京导游词
2015/02/12 职场文书
公文写作:工伤事故分析报告怎么写?
2019/11/05 职场文书
导游词之铁岭象牙山
2019/12/06 职场文书
Python实现列表拼接和去重的三种方式
2021/07/02 Python
Vue的列表之渲染,排序,过滤详解
2022/02/24 Vue.js
Java服务调用RestTemplate与HttpClient的使用详解
2022/06/21 Java/Android