解决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 相关文章推荐
php miniBB中文乱码问题解决方法
Nov 25 PHP
php实现首页链接查询 友情链接检查的代码
Jan 05 PHP
php自定义函数call_user_func和call_user_func_array详解
Jul 14 PHP
记录mysql性能查询过程的使用方法
May 02 PHP
PHP输出XML到页面的3种方法详解
Jun 06 PHP
php中的curl使用入门教程和常见用法实例
Apr 10 PHP
php获取服务器端mac和客户端mac的地址支持WIN/LINUX
May 15 PHP
php中HTTP_REFERER函数用法实例
Nov 21 PHP
PHP+jQuery翻板抽奖功能实现
Oct 19 PHP
PHP实现数据库统计时间戳按天分组输出数据的方法
Oct 10 PHP
浅谈PHP匿名函数和闭包
Mar 08 PHP
laravel 解决paginate查询多个字段报错的问题
Oct 22 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
简单的PHP多图上传小程序代码
2011/07/17 PHP
提示Trying to clone an uncloneable object of class Imagic的解决
2011/10/27 PHP
Codeigniter购物车类不能添加中文的解决方法
2014/11/29 PHP
laravel5.4利用163邮箱发送邮件的步骤详解
2017/09/22 PHP
javascript 框架小结 个人工作经验
2009/06/13 Javascript
JavaScript OOP面向对象介绍
2010/12/02 Javascript
根据json字符串生成Html的一种方式
2013/01/09 Javascript
jquery操作angularjs对象
2015/06/26 Javascript
微信小程序开发一键登录 获取session_key和openid实例
2016/11/23 Javascript
Angular弹出模态框的两种方式
2017/10/19 Javascript
详解vue-router 命名路由和命名视图
2018/06/01 Javascript
vue构建动态表单的方法示例
2018/09/22 Javascript
JavaScript实现轮播图片完整代码
2020/03/07 Javascript
javascript 易错知识点实例小结
2020/04/25 Javascript
[01:59]深扒TI7聊天轮盘语音出处 1
2017/05/11 DOTA
[03:06]2018年度CS GO最具人气解说-完美盛典
2018/12/16 DOTA
python 接口_从协议到抽象基类详解
2017/08/24 Python
python url 参数修改方法
2018/12/26 Python
关于python 跨域处理方式详解
2020/03/28 Python
Python通过format函数格式化显示值
2020/10/17 Python
Python的Tqdm模块实现进度条配置
2021/02/24 Python
python爬虫破解字体加密案例详解
2021/03/02 Python
Office DEPOT法国官网:欧迪办公用品采购
2018/01/03 全球购物
Python文件操作的面试题
2013/06/22 面试题
园林设计师自荐信
2013/11/18 职场文书
设计总监岗位职责
2013/12/07 职场文书
机关党员2014全国两会学习心得体会
2014/03/10 职场文书
党支部党的群众路线对照检查材料
2014/09/24 职场文书
民主生活会剖析材料
2014/09/30 职场文书
证劵公司反洗钱宣传活动总结
2015/05/08 职场文书
先进工作者主要事迹材料
2015/11/03 职场文书
2016年大学生暑假爱心支教活动策划书
2015/11/26 职场文书
2016年清明节期间群众祭祀活动工作总结
2016/04/01 职场文书
sql中mod()函数取余数的用法
2021/05/29 SQL Server
Java框架入门之简单介绍SpringBoot框架
2021/06/18 Java/Android
SqlServer数据库远程连接案例教程
2021/07/15 SQL Server