解决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 相关文章推荐
详细介绍:Apache+PHP+MySQL配置攻略
Sep 05 PHP
一个oracle+PHP的查询的例子
Oct 09 PHP
一个颜色轮换的简单例子
Oct 09 PHP
PHP文件打开、关闭、写入的判断与执行代码
May 24 PHP
php多用户读写文件冲突的解决办法
Nov 06 PHP
PHP实现的博客欢迎提示功能(很特别哦)
Jun 05 PHP
用PHP代码在网页上生成图片
Jul 01 PHP
PHP中使用array函数新建一个数组
Nov 19 PHP
php反射类ReflectionClass用法分析
May 12 PHP
Laravel搭建后台登录系统步骤详解
Jul 26 PHP
PHP的mysqli_ssl_set()函数讲解
Jan 23 PHP
ThinkPHP5.0框架验证码功能实现方法【基于第三方扩展包】
Mar 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
多文件上传的例子
2006/10/09 PHP
javascript数组的扩展实现代码集合
2008/06/01 Javascript
js树形控件脚本代码
2008/07/24 Javascript
javascript开发随笔一 preventDefault的必要
2011/11/25 Javascript
javascript相等运算符与等同运算符详细介绍
2013/11/09 Javascript
详解JavaScript中的every()方法
2015/06/08 Javascript
Express实现前端后端通信上传图片之存储数据库(mysql)傻瓜式教程(一)
2015/12/10 Javascript
JS实现表单多文件上传样式美化支持选中文件后删除相关项
2016/09/30 Javascript
利用JavaScript在网页实现八数码启发式A*算法动画效果
2017/04/16 Javascript
Three.js如何用轨迹球插件(trackball)增加对模型的交互功能详解
2017/09/25 Javascript
详解Vue路由History mode模式中页面无法渲染的原因及解决
2017/09/28 Javascript
jQuery中使用validate插件校验表单功能
2019/05/24 jQuery
js使用文件流下载csv文件的实现方法
2019/07/15 Javascript
Node.js中的异步生成器与异步迭代详解
2021/01/31 Javascript
浅谈Python2获取中文文件名的编码问题
2018/01/09 Python
Jupyter安装nbextensions,启动提示没有nbextensions库
2020/04/23 Python
python绘制散点图并标记序号的方法
2018/12/11 Python
python循环定时中断执行某一段程序的实例
2019/06/29 Python
Python如何把Spark数据写入ElasticSearch
2020/04/18 Python
python多进程 主进程和子进程间共享和不共享全局变量实例
2020/04/25 Python
python中把元组转换为namedtuple方法
2020/12/09 Python
Python编写万花尺图案实例
2021/01/03 Python
TensorFlow低版本代码自动升级为1.0版本
2021/02/20 Python
详解H5 活动页之移动端 REM 布局适配方法
2017/12/07 HTML / CSS
耐克美国官网:Nike.com
2016/08/01 全球购物
史蒂夫·马登加拿大官网:Steve Madden加拿大
2017/11/18 全球购物
linux系统都有哪些运行级别
2016/03/26 面试题
《兰亭集序》教学反思
2014/02/11 职场文书
保安队长职务说明书
2014/02/23 职场文书
爱牙日活动总结
2014/08/29 职场文书
计划生育证明格式范本
2014/09/12 职场文书
群众路线教育实践活动心得体会(四风)
2014/11/03 职场文书
考试没考好检讨书(精选篇)
2014/11/16 职场文书
新郎新娘答谢词
2015/01/04 职场文书
2019年最新感恩节祝福语(28句)
2019/11/27 职场文书
MySQL面试题讲解之如何设置Hash索引
2021/11/01 MySQL