解决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编程中八种常见的文件操作方式
Nov 19 PHP
php 获取select下拉列表框的值
May 08 PHP
PHP中fwrite与file_put_contents性能测试代码
Aug 02 PHP
PHP CURL CURLOPT参数说明(curl_setopt)
Sep 30 PHP
php配合jquery实现增删操作具体实例
Dec 12 PHP
php 邮件发送问题解决
Mar 22 PHP
php CI框架插入一条或多条sql记录示例
Jul 29 PHP
PHP实现留言板功能的详细代码
Mar 25 PHP
php mysql PDO 查询操作的实例详解
Sep 23 PHP
ThinkPHP 5.1 跨域配置方法
Oct 11 PHP
PHP7变量处理机制修改
Mar 09 PHP
PhpSpreadsheet中文文档 | Spreadsheet操作教程实例
Apr 01 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和Mysqlweb应用开发核心技术 第1部分 Php基础-1 开始了解php
2011/07/03 PHP
php实现json编码的方法
2015/07/30 PHP
用window.location.href实现刷新另个框架页面
2007/03/07 Javascript
javascript下阻止表单重复提交、防刷新、防后退
2007/08/17 Javascript
javascript检测浏览器flash版本的实现代码
2011/12/06 Javascript
JavaScript快速检测浏览器对CSS3特性的支持情况
2012/09/26 Javascript
Javascript中Array.prototype.map()详解
2014/10/22 Javascript
jQuery生成假加载动画效果
2016/12/01 Javascript
微信小程序 地图map详解及简单实例
2017/01/10 Javascript
javascript回调函数的概念理解与用法分析
2017/05/27 Javascript
jQuery实现全选、反选和不选功能
2017/08/16 jQuery
Node.js 中使用 async 函数的方法
2017/11/20 Javascript
jquery动态添加带有样式的HTML标签元素方法
2018/02/24 jQuery
使用koa-log4管理nodeJs日志笔记的使用方法
2018/11/30 NodeJs
vue组件化中slot的基本使用方法
2019/05/01 Javascript
Vue-drag-resize 拖拽缩放插件的使用(简单示例)
2019/12/04 Javascript
浅谈Vue.use到底是什么鬼
2020/01/21 Javascript
vuejs实现下拉框菜单选择
2020/10/23 Javascript
vue 图片裁剪上传组件的实现
2020/11/12 Javascript
JavaScript中的几种继承方法示例
2020/12/06 Javascript
提升Python程序运行效率的6个方法
2015/03/31 Python
Python3.x爬虫下载网页图片的实例讲解
2018/05/22 Python
python使用docx模块读写docx文件的方法与docx模块常用方法详解
2020/02/17 Python
Django 实现将图片转为Base64,然后使用json传输
2020/03/27 Python
Python基于xlrd模块处理合并单元格
2020/07/28 Python
详解canvas drawImage()方法绘制图片不显示的问题
2018/10/08 HTML / CSS
html5生成柱状图(条形图)效果的实例代码
2016/03/25 HTML / CSS
速比涛英国官网:Speedo英国
2019/07/15 全球购物
Diesel美国网上商店:意大利牛仔时装品牌
2020/12/10 全球购物
研究生自我鉴定范文
2013/10/30 职场文书
优秀演讲稿范文
2013/12/29 职场文书
幼儿园大班毕业教师寄语
2014/04/03 职场文书
社区活动总结报告
2014/05/05 职场文书
党员个人自我剖析材料
2014/10/08 职场文书
运动会广播稿200米(5篇)
2014/10/15 职场文书
2015财务年终工作总结范文
2015/05/22 职场文书