解决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 相关文章推荐
基于mysql的论坛(4)
Oct 09 PHP
php防攻击代码升级版
Dec 29 PHP
PHP程序开发范例学习之表单 获取文本框的值
Aug 08 PHP
php命名空间学习详解
Feb 27 PHP
php实现文件下载功能的几个代码分享
May 10 PHP
使用PHP处理数据库数据如何将数据返回客户端并显示当前状态
Feb 16 PHP
php图片上传类 附调用方法
May 15 PHP
ThinkPHP3.2.3实现分页的方法详解
Jun 03 PHP
yii使用bootstrap分页样式的实例
Jan 17 PHP
PHP实现二叉树深度优先遍历(前序、中序、后序)和广度优先遍历(层次)实例详解
Apr 20 PHP
PHP中散列密码的安全性分析
Jul 26 PHP
解决laravel 表单提交-POST 异常的问题
Oct 15 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中smarty实现多模版网站的方法
2015/06/11 PHP
thinkPHP模型初始化实例分析
2015/12/03 PHP
thinkPHP基于ajax实现的菜单与分页示例
2016/07/12 PHP
PHP使用PDO操作sqlite数据库应用案例
2019/03/07 PHP
一个js写的日历(代码部分网摘)
2009/09/20 Javascript
js加减乘除丢失精度问题解决方法
2014/05/16 Javascript
Node.js插件的正确编写方式
2014/08/03 Javascript
微信小程序开发一键登录 获取session_key和openid实例
2016/11/23 Javascript
js实现图片切换(动画版)
2016/12/25 Javascript
完美解决手机网页中输入框被输入法遮挡的问题
2017/12/19 Javascript
vue的style绑定background-image的方式和其他变量数据的区别详解
2018/09/03 Javascript
使用angularjs.foreach时return的问题解决
2018/09/30 Javascript
javascript中函数的写法实例代码详解
2018/10/28 Javascript
Vue实现简单分页器
2018/12/29 Javascript
Nodejs实现用户注册功能
2019/04/14 NodeJs
jquery图片预览插件实现方法详解
2019/07/18 jQuery
vue 二维码长按保存和复制内容操作
2020/09/22 Javascript
Python网络爬虫项目:内容提取器的定义
2016/10/25 Python
【Python】Python的urllib模块、urllib2模块批量进行网页下载文件
2016/11/19 Python
Python 比较两个数组的元素的异同方法
2017/08/17 Python
python+matplotlib实现鼠标移动三角形高亮及索引显示
2018/01/15 Python
python爬虫基本知识
2018/03/05 Python
python实现图书馆研习室自动预约功能
2018/04/27 Python
Python面向对象之类的封装操作示例
2019/06/08 Python
Python 类属性与实例属性,类对象与实例对象用法分析
2019/09/20 Python
Python的形参和实参使用方式
2019/12/24 Python
django模型动态修改参数,增加 filter 字段的方式
2020/03/16 Python
python 爬虫基本使用——统计杭电oj题目正确率并排序
2020/10/26 Python
奥地利网上现代灯具和灯饰店:Lampenwelt.at
2018/01/29 全球购物
Ted Baker美国官网:英国时尚品牌
2018/10/29 全球购物
投标单位介绍信
2014/01/09 职场文书
中年人生感言
2014/02/04 职场文书
酒店营销策划方案
2014/02/07 职场文书
2014年服装销售工作总结
2014/11/27 职场文书
社团招新宣传语
2015/07/13 职场文书
九年级历史教学反思
2016/02/19 职场文书