解决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 引用(&amp;)详解
Nov 20 PHP
劣质的PHP代码简化
Feb 08 PHP
php从右向左/从左向右截取字符串的实现方法
Nov 28 PHP
php 目录遍历、删除 函数的使用介绍
Apr 28 PHP
基于PHP的简单采集数据入库程序【续篇】
Jul 30 PHP
PHP管理依赖(dependency)关系工具 Composer 安装与使用
Aug 18 PHP
php中strstr、strrchr、substr、stristr四个函数的区别总结
Sep 22 PHP
PHP查询大量数据内存耗尽问题的解决方法
Oct 28 PHP
php删除二维数组中的重复值方法
Mar 12 PHP
PHP PDOStatement::getAttribute讲解
Feb 01 PHP
PHP使用观察者模式处理异常信息的方法详解
Sep 24 PHP
PHP序列化和反序列化深度剖析实例讲解
Dec 29 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
全国FM电台频率大全 - 12 安徽省
2020/03/11 无线电
excellent!――ASCII Art(由目标图象生成ascii)
2007/02/20 PHP
PHP使用Session遇到的一个Permission denied Notice解决办法
2014/07/30 PHP
微信支付开发发货通知实例
2016/07/12 PHP
PHP中的正则表达式实例详解
2017/04/25 PHP
php文件上传及下载附带显示文件及目录功能
2017/04/27 PHP
javascript 无提示关闭窗口脚本
2009/08/17 Javascript
深入理解JavaScript系列(7) S.O.L.I.D五大原则之开闭原则OCP
2012/01/15 Javascript
js的参数有长度限制吗?发现不能超过2083个字符
2014/04/20 Javascript
jQuery判断当前点击的是第几个li的代码
2014/09/26 Javascript
JavaScript中的数学运算介绍
2014/12/29 Javascript
JS+CSS实现Div弹出窗口同时背景变暗的方法
2015/03/04 Javascript
js比较日期大小的方法
2015/05/12 Javascript
jQuery检测返回值的数据类型
2015/07/13 Javascript
JavaScript中使用sencha gridpanel 编辑单元格、改变单元格颜色
2015/11/26 Javascript
Javascript动画效果(1)
2016/10/11 Javascript
JavaScript遍历Json串浏览器输出的结果不统一问题
2016/11/03 Javascript
js实现音乐播放控制条
2017/09/09 Javascript
vue中mint-ui的使用方法
2018/04/04 Javascript
Vuex 快速入门(简单易懂)
2018/09/20 Javascript
在Python的Flask框架中构建Web表单的教程
2016/06/04 Python
快速入手Python字符编码
2016/08/03 Python
Python3实现爬取简书首页文章标题和文章链接的方法【测试可用】
2018/12/11 Python
pytorch中nn.Conv1d的用法详解
2019/12/31 Python
Python爬取365好书中小说代码实例
2020/02/28 Python
pytorch 计算ConvTranspose1d输出特征大小方式
2020/06/23 Python
CSS3 真的会替代 SCSS 吗
2021/03/09 HTML / CSS
中国专业的音频分享平台:喜马拉雅
2019/05/24 全球购物
美国眼镜网站:LensCrafters
2020/01/19 全球购物
公司承诺书范文
2014/05/19 职场文书
预备党员对照检查材料思想汇报
2014/09/24 职场文书
乡镇科协工作总结2015
2015/05/19 职场文书
公司岗位说明书
2015/10/08 职场文书
五年级作文之学校的四季
2019/12/05 职场文书
改造DE1103三步曲
2022/04/07 无线电
Spring中的@Transactional的工作原理
2022/06/05 Java/Android