解决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 相关文章推荐
提问的智慧(2)
Oct 09 PHP
PHP在获取指定目录下的目录,在获取的目录下面再创建文件,多平台
Aug 03 PHP
PHP父类调用子类方法的代码例子
Apr 09 PHP
phpword插件导出word文件时中文乱码问题处理方案
Aug 19 PHP
php中使用key,value,current,next和prev函数遍历数组的方法
Mar 17 PHP
php恢复数组的key为数字序列的方法
Apr 28 PHP
PHP统计目录中文件以及目录中目录大小的方法
Jan 09 PHP
Zend Framework教程之请求对象的封装Zend_Controller_Request实例详解
Mar 07 PHP
PHP快速推送微信模板消息
Apr 14 PHP
PHP实现删除多重数组对象属性并重新赋值的方法
Jun 07 PHP
PHP完全二叉树定义与实现方法示例
Oct 09 PHP
php+mysql+ajax 局部刷新点赞/取消点赞功能(每个账号只点赞一次)
Jul 24 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的五种设计模式
2012/09/05 PHP
分享下PHP register_globals 值为on与off的理解
2013/09/26 PHP
ThinkPHP5与单元测试PHPUnit使用详解
2020/02/23 PHP
StringTemplate遇见jQuery冲突的解决方法
2011/09/22 Javascript
防止按钮在短时间内被多次点击的方法
2014/03/10 Javascript
jQuery Ajax请求后台数据并在前台接收
2016/12/10 Javascript
JS使用正则表达式验证身份证号码
2017/06/23 Javascript
JSON创建键值对(key是中文或者数字)方式详解
2017/08/24 Javascript
详解vue添加删除元素的方法
2018/06/30 Javascript
Electron autoUpdater实现Windows安装包自动更新的方法
2018/12/24 Javascript
nuxt踩坑之Vuex状态树的模块方式使用详解
2019/09/06 Javascript
layui之数据表格--与后台交互获取数据的方法
2019/09/29 Javascript
python实现带验证码网站的自动登陆实现代码
2015/01/12 Python
Python异常对代码运行性能的影响实例解析
2018/02/08 Python
详谈python中冒号与逗号的区别
2018/04/18 Python
Python解析、提取url关键字的实例详解
2018/12/17 Python
Python实现将通信达.day文件读取为DataFrame
2018/12/22 Python
Python使用pandas和xlsxwriter读写xlsx文件的方法示例
2019/04/09 Python
详解java调用python的几种用法(看这篇就够了)
2020/12/10 Python
HTML+CSS3 模仿Windows7 桌面效果
2010/06/17 HTML / CSS
美国购买韩国护肤和美容产品网站:Althea Korea
2020/11/16 全球购物
施华洛世奇新加坡官网:SWAROVSKI新加坡
2020/10/06 全球购物
如何理解委托
2012/01/06 面试题
书法培训心得体会
2014/01/05 职场文书
烹调加工管理制度
2014/02/04 职场文书
优秀语文教师事迹
2014/05/18 职场文书
小组名称和口号
2014/06/09 职场文书
庆元旦活动总结
2014/07/09 职场文书
考试保密承诺书
2014/08/30 职场文书
2014年党员自我评议对照检查材料
2014/09/20 职场文书
四风对照检查剖析材料
2014/10/07 职场文书
导游词格式
2015/02/13 职场文书
中秋晚会致辞
2015/07/31 职场文书
JavaScript实现显示和隐藏图片
2021/04/29 Javascript
springboot如何接收application/x-www-form-urlencoded类型的请求
2021/11/02 Java/Android
SpringBoot详解整合Redis缓存方法
2022/07/15 Java/Android