解决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中session变量的销毁
Feb 27 PHP
用PHP来计算某个目录大小的方法
Apr 01 PHP
开源php中文分词系统SCWS安装和使用实例
Apr 11 PHP
php中curl、fsocket、file_get_content三个函数的使用比较
May 09 PHP
ThinkPHP中的系统常量和预定义常量集合
Jul 01 PHP
Zend Framework教程之Zend_Layout布局助手详解
Mar 04 PHP
无需数据库在线投票调查php代码
Jul 20 PHP
PHP转换文本框内容为HTML格式的方法
Jul 20 PHP
Laravel实现表单提交
May 07 PHP
PHP闭包定义与使用简单示例
Apr 13 PHP
解决laravel id非自增 模型取回为0 的问题
Oct 11 PHP
php的无刷新操作实现方法分析
Feb 28 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 Token(令牌)设计
2008/03/15 PHP
关于Appserv无法打开localhost问题的解决方法
2009/10/16 PHP
解析:使用php mongodb扩展时 需要注意的事项
2013/06/18 PHP
PHP CodeIgniter框架的工作原理研究
2015/03/30 PHP
详解php与ethereum客户端交互
2018/04/28 PHP
Track Image Loading效果代码分析
2007/08/13 Javascript
JavaScript的递归之递归与循环示例介绍
2013/08/05 Javascript
深入探讨javascript函数式编程
2015/10/11 Javascript
jquery实现倒计时功能
2015/12/28 Javascript
正则验证小数点后面只能有两位数的方法
2017/02/28 Javascript
JavaScript仿微信打飞机游戏
2020/07/05 Javascript
原生JavaScript实现的简单省市县三级联动功能示例
2017/05/27 Javascript
Vue-CLI3.x 设置反向代理的方法
2018/12/06 Javascript
JavaScript数据结构与算法之二叉树添加/删除节点操作示例
2019/03/01 Javascript
Vue 中文本内容超出规定行数后展开收起的处理的实现方法
2019/04/28 Javascript
基于Node的Axure文件在线预览的实现代码
2019/08/28 Javascript
layui table 复选框跳页后再回来保持原来选中的状态示例
2019/10/26 Javascript
基于jQuery实现挂号平台首页源码
2020/01/06 jQuery
vue+render+jsx实现可编辑动态多级表头table的实例代码
2020/04/01 Javascript
npm ci命令的基本使用方法
2020/09/20 Javascript
在Python3中使用asyncio库进行快速数据抓取的教程
2015/04/02 Python
从django的中间件直接返回请求的方法
2018/05/30 Python
Python开启线程,在函数中开线程的实例
2019/02/22 Python
详解用Python实现自动化监控远程服务器
2019/05/18 Python
Django数据库操作之save与update的使用
2020/04/01 Python
推荐技术人员一款Python开源库(造数据神器)
2020/07/08 Python
Python3基于plotly模块保存图片表格
2020/08/03 Python
意大利领先的线上奢侈品销售电商:Eleonora Bonucci
2017/10/17 全球购物
高二历史教学反思
2014/01/25 职场文书
《最大的“书”》教学反思
2014/02/14 职场文书
个人委托书范本
2014/04/02 职场文书
个人自荐材料
2014/05/23 职场文书
大专生求职信
2014/06/29 职场文书
2016教师政治学习心得体会
2016/01/23 职场文书
python实现图片九宫格分割的示例
2021/04/25 Python
Go gRPC进阶教程gRPC转换HTTP
2022/06/16 Golang