解决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缩略图生成程式(需要GD库支持)
Mar 06 PHP
PHP实现定时生成HTML网站首页实例代码
Nov 20 PHP
PHP session会话的安全性分析
Sep 08 PHP
phpcms模块开发之swfupload的使用介绍
Apr 28 PHP
PHP 转义使用详解
Jul 15 PHP
php常用图片处理类
Mar 16 PHP
10个值得深思的PHP面试题
Nov 14 PHP
php简单随机字符串生成方法示例
Apr 19 PHP
PHP时间处理类操作示例
Sep 05 PHP
php 策略模式原理与应用深入理解
Sep 25 PHP
TP5框架model常见操作示例小结【增删改查、聚合、时间戳、软删除等】
Apr 05 PHP
PHP如何使用cURL实现Get和Post请求
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
Codeigniter+PHPExcel实现导出数据到Excel文件
2014/06/12 PHP
一个经典的PHP文件上传类分享
2014/11/18 PHP
学习php设计模式 php实现策略模式(strategy)
2015/12/07 PHP
PHP safe_mode开启对于PHP系统函数有什么影响
2020/11/10 PHP
图片自动更新(说明)
2006/10/02 Javascript
十个优秀的Ajax/Javascript实例网站收集
2010/03/31 Javascript
如何使用AngularJs打造权限管理系统【简易型】
2016/05/09 Javascript
AngularJS基础 ng-keypress 指令简单示例
2016/08/02 Javascript
Angularjs中的ui-bootstrap的使用教程
2017/02/19 Javascript
通过命令行生成vue项目框架的方法
2017/07/12 Javascript
Vue中计算属性computed的示例解读
2017/07/26 Javascript
详解AngularJS1.x学习directive 中‘&amp; ’‘=’ ‘@’符号的区别使用
2017/08/23 Javascript
Angular使用Md5加密的解决方法
2017/09/16 Javascript
JavaScript基础之this和箭头函数详析
2019/09/05 Javascript
vue实现评论列表功能
2019/10/25 Javascript
Vue实现base64编码图片间的切换功能
2019/12/04 Javascript
浅析Vue 中的 render 函数
2020/02/28 Javascript
vue如何使用外部特殊字体的操作
2020/07/30 Javascript
[01:04:02]DOTA2-DPC中国联赛 正赛 Elephant vs IG BO3 第二场 1月24日
2021/03/11 DOTA
Python实现简单的获取图片爬虫功能示例
2017/07/12 Python
Python 3.7新功能之dataclass装饰器详解
2018/04/21 Python
django之跨表查询及添加记录的示例代码
2018/10/16 Python
Python多线程同步---文件读写控制方法
2019/02/12 Python
Python实现非正太分布的异常值检测方式
2019/12/09 Python
Pytorch mask_select 函数的用法详解
2020/02/18 Python
Python3.7 读取音频根据文件名生成脚本的代码
2020/04/07 Python
Python加载数据的5种不同方式(收藏)
2020/11/13 Python
移动web模拟客户端实现多方框输入密码效果【附代码】
2016/03/25 HTML / CSS
移动端Html5中百度地图的点击事件
2019/01/31 HTML / CSS
英国排名第一的在线宠物用品商店:Monster Pet Supplies
2018/05/20 全球购物
C#如何允许一个类被继承但是避免这个类的方法被重载?
2015/02/24 面试题
电子商务专业学生职业生涯规划
2014/03/07 职场文书
会计专业自荐信
2014/06/03 职场文书
法人身份证明书
2014/10/08 职场文书
花木兰观后感
2015/06/10 职场文书
SQL之各种join小结详细讲解
2021/08/04 MySQL