解决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中与数组相关的函数
Mar 22 PHP
实用函数8
Nov 08 PHP
PHP获取网卡地址的代码
Apr 09 PHP
利用Ffmpeg获得flv视频缩略图和视频时间的代码
Sep 15 PHP
php数组函数序列之array_sum() - 计算数组元素值之和
Oct 29 PHP
php空间不支持socket但支持curl时recaptcha的用法
Nov 07 PHP
PHP查询数据库中满足条件的记录条数(两种实现方法)
Jan 29 PHP
PHP 循环删除无限分类子节点的实现代码
Jun 21 PHP
CI框架中$this-&gt;load-&gt;library()用法分析
May 18 PHP
Zend Framework入门教程之Zend_Registry组件用法详解
Dec 09 PHP
PHP赋值的内部是如何跑的详解
Jan 13 PHP
php 使用expat方式解析xml文件操作示例
Nov 26 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 Mysql编程之高级技巧
2008/08/27 PHP
php for 循环语句使用方法详细说明
2010/05/09 PHP
php微信支付之APP支付方法
2015/03/04 PHP
php实现模拟登陆方正教务系统抓取课表
2015/05/19 PHP
PHP后台备份MySQL数据库的源码实例
2019/03/18 PHP
JS 进度条效果实现代码整理
2011/05/21 Javascript
利用cookie记住背景颜色示例代码
2013/11/04 Javascript
js实现的map方法示例代码
2014/01/13 Javascript
jQuery窗口、文档、网页各种高度的精确理解
2014/07/02 Javascript
JavaScript中的数组特性介绍
2014/12/30 Javascript
jQuery对指定元素中指定字符串进行替换的方法
2015/03/17 Javascript
运用js教你轻松制作html音乐播放器
2020/04/17 Javascript
浅谈javascript的闭包
2017/01/23 Javascript
three.js中文文档学习之如何本地运行详解
2017/11/20 Javascript
js捆绑TypeScript声明文件的方法教程
2018/04/13 Javascript
详解JQuery基础动画操作
2019/04/12 jQuery
layui清空,重置表单数据的实例
2019/09/12 Javascript
Vue实现导航栏的显示开关控制
2019/11/01 Javascript
JS实现电商商品展示放大镜特效
2020/01/07 Javascript
[01:00:30]TFT vs VGJ.T Supermajor 败者组 BO3 第一场 6.5
2018/06/06 DOTA
[01:11:11]Alliance vs RNG 2019国际邀请赛淘汰赛 败者组BO1 8.20.mp4
2020/07/19 DOTA
python3 与python2 异常处理的区别与联系
2016/06/19 Python
浅谈Python中用datetime包进行对时间的一些操作
2016/06/23 Python
利用Pandas和Numpy按时间戳将数据以Groupby方式分组
2019/07/22 Python
手写一个python迭代器过程详解
2019/08/27 Python
利用python读取YUV文件 转RGB 8bit/10bit通用
2019/12/09 Python
Python for循环搭配else常见问题解决
2020/02/11 Python
日本热销NO.1胶原蛋白冻:Aishitoto爱希特多
2019/06/20 全球购物
腾讯技术类校园招聘笔试试题
2014/05/06 面试题
大学生专科学习生活的自我评价
2013/12/07 职场文书
2014年元旦活动方案
2014/02/15 职场文书
高中毕业生的个人自我评价
2014/02/21 职场文书
保护动物倡议书
2014/04/15 职场文书
保护环境标语
2014/06/09 职场文书
民主评议教师党员自我评价
2015/03/04 职场文书
frg-100简单操作(设置)说明
2022/04/05 无线电