解决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 相关文章推荐
PHP5新特性: 更加面向对象化的PHP
Nov 18 PHP
php面向对象全攻略 (七) 继承性
Sep 30 PHP
php简单的会话类代码
Aug 08 PHP
深入PHP nl2br()格式化输出的详解
Jun 05 PHP
解析phpstorm + xdebug 远程断点调试
Jun 20 PHP
php中二维数组排序问题方法详解
Aug 28 PHP
php对文件夹进行相关操作(遍历、计算大小)
Nov 04 PHP
几个优化WordPress中JavaScript加载体验的插件介绍
Dec 17 PHP
php技巧小结【推荐】
Jan 19 PHP
ubutu 16.04环境下,PHP与mysql数据库,网页登录验证实例讲解
Jul 20 PHP
ThinkPHP框架下微信支付功能总结踩坑笔记
Apr 10 PHP
PHP var关键字相关原理及使用实例解析
Jul 11 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跨平台获取服务器IP地址自定义函数分享
2014/12/29 PHP
PHP实现批量修改文件后缀名的方法
2015/07/30 PHP
php+ajax简单实现全选删除的方法
2016/12/06 PHP
JavaScript在IE和Firefox(火狐)的不兼容问题解决方法小结
2010/04/13 Javascript
js css 实现遮罩层覆盖其他页面元素附图
2014/09/22 Javascript
文本框只能输入数字的实现方法(兼容IE火狐)
2016/06/25 Javascript
微信小程序 生命周期详解
2016/10/12 Javascript
JavaScript中绑定事件的三种方式及去除绑定
2016/11/05 Javascript
基于js实现checkbox批量选中操作
2016/11/22 Javascript
AngularJS路由Ui-router模块用法示例
2017/05/29 Javascript
详解Nodejs内存治理
2018/05/13 NodeJs
Vue 指令实现按钮级别权限管理功能
2019/04/23 Javascript
vue实践---根据不同环境,自动转换请求的url地址操作
2020/09/21 Javascript
使用python搭建Django应用程序步骤及版本冲突问题解决
2013/11/19 Python
python判断、获取一张图片主色调的2个实例
2014/04/10 Python
Python实现TCP/IP协议下的端口转发及重定向示例
2016/06/14 Python
Python实现的密码强度检测器示例
2017/08/23 Python
Python 移动光标位置的方法
2019/01/20 Python
用python拟合等角螺线的实现示例
2019/12/27 Python
tensorflow 限制显存大小的实现
2020/02/03 Python
Tensorflow限制CPU个数实例
2020/02/06 Python
python如何编写win程序
2020/06/08 Python
纯CSS3打造动感漂亮时尚的扇形菜单
2014/03/18 HTML / CSS
世界领先的以旅馆为主的在线预订平台:Hostelworld
2016/10/09 全球购物
泰国折扣酒店预订:Hotels2Thailand
2018/03/20 全球购物
英国邮购活的植物主要供应商:Gardening Direct
2019/01/28 全球购物
JS原生实现轮播图的几种方法
2021/03/23 Javascript
学院书画协会部门职责
2013/11/28 职场文书
兼职业务员岗位职责
2014/01/01 职场文书
工会主席事迹材料
2014/06/03 职场文书
综合素质评价思想道德自我评价
2015/03/09 职场文书
实习班主任自我评价
2015/03/11 职场文书
2015年文明创建工作总结
2015/04/30 职场文书
物业保洁员管理制度
2015/08/05 职场文书
2015质检员个人年终工作总结
2015/10/23 职场文书
Python通过loop.run_in_executor执行同步代码 同步变为异步
2022/04/11 Python