解决yii2左侧菜单子级无法高亮问题的方法_php实例

我们先来看看具体问题。
添加角色是属于角色这个菜单的,如何在执行添加角色这个操作时让角色这个菜单处于选中状态呢?
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),
]);

快去试试看我们的问题解决没有吧。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索高亮
, yii2
左侧菜单
lucene高亮实例、lucene5.3.1高亮实例、代码高亮实例效果、lucene5高亮实例、代码高亮实例,以便于您获取更多的相关知识。

时间: 2024-12-03 04:44:53

解决yii2左侧菜单子级无法高亮问题的方法_php实例的相关文章

解决PHP里大量数据循环时内存耗尽的方法_php实例

最近在开发一个PHP程序的时候遇到如下一问题: PHP Fatal error: Allowed memory size of 268 435 456 bytes exhausted 错误信息显示允许的最大内存已经耗尽.遇到这样的错误起初让我很诧异,但转眼一想,也不奇怪,因为我正在开发的这个程序是要用一个foreach循环语句在一个有4万条记录的表里全表搜索具有特定特征的数据,也就是说,一次要把4万条数据取出,然后逐条检查每天数据.可想而知,4万条数据全部加载到内存中,内存不爆才怪.   毕竟编

Yii2中OAuth扩展及QQ互联登录实现方法_php实例

本文实例讲述了Yii2中OAuth扩展及QQ互联登录实现方法.分享给大家供大家参考,具体如下: 复制代码 代码如下: php composer.phar require --prefer-dist yiisoft/yii2-authclient "*" Quick start 快速开始 更改Yii2的配置文件config/main.php,在components中增加如下内容 'components' => [ 'authClientCollection' => [ 'cl

Yii2简单实现给表单添加验证码的方法_php实例

本文实例讲述了Yii2简单实现给表单添加验证码的方法.分享给大家供大家参考,具体如下: 控制器SiteController: class SiteController extends Controller { // ... public function actions() { return [ // ... 'captcha' => [ 'class' => 'yii\captcha\CaptchaAction', 'fixedVerifyCode' => YII_ENV_TEST ?

Yii2实现让关联字段支持搜索功能的方法_php实例

本文实例讲述了Yii2实现让关联字段支持搜索功能的方法.分享给大家供大家参考,具体如下: 这里有两张表,表结构如下,companies_compay_id 为外键 yii2advanced.branches表: branch_id:int(11) companies_company_id:int(11) branch_name:varchar(100) branch_address:varchar(255) branch_created_date:datetime branch_status:e

Yii2使用dropdownlist实现地区三级联动功能的方法_php实例

本文实例讲述了Yii2使用dropdownlist实现地区三级联动功能的方法.分享给大家供大家参考,具体如下: 视图部分: <?php use yii\helpers\Url; use yii\widgets\ActiveForm; use yii\helpers\ArrayHelper; use yii\helpers\Html; /* @var $this yii\web\View */ /* @var $model common\search\service\ItemSearch */ /

Yii2框架引用bootstrap中日期插件yii2-date-picker的方法_php实例

本文实例讲述了Yii2框架引用bootstrap中日期插件yii2-date-picker的方法.分享给大家供大家参考,具体如下: 最近在学习yii2 框架,发现框架很强大,而且结合了时下许多新的技术在里面. 简单记录一下yii2-date-picker插件的使用方法: 首先先了解一下github中的相关资源:https://github.com/2amigos/yii2-date-picker-widget 其次:在自己的项目中利用上面链接中的相关方法下载此资源,命令为: php compos

yii2 RBAC使用DbManager实现后台权限判断的方法_php实例

本文实例讲述了yii2 RBAC使用DbManager实现后台权限判断的方法.分享给大家供大家参考,具体如下: 首先根据文档生成yii2 框架中的表 yii migrate --migrationPath=@yii/rbac/migrations/ 生成如下4表: auth_assignment auth_item_child auth_item auth_rule 使用yii的gii快速生成对应的model,但是由于auth_item表同时存储角色跟权限,由于后面我们要分角色跟权限来做curd

Yii2中使用asset压缩js,css文件的方法_php实例

官网文档 http://www.yiiframework.com/doc-2.0/guide-structure-assets.html yii目录下运行 asset/template assets.php 生成assets.php,这是一个配置模板,并修改如下 <?php /** * Configuration file for the "yii asset" console command. */ // In the console environment, some pat

yii2.0实现pathinfo的形式访问的配置方法_php实例

yii2.0默认的访问形式为:dxr.com/index.php?r=index/list,一般我们都会配置成pathinfo的形式来访问:dxr.com/index/list,这样更符合用户习惯. 具体的配置方法为: 一.配置yii2.0. 打开config目录下的web.php,在$config = [ 'components'=>[ 加到这里 ] ]中加入: 'urlManager' => [ 'enablePrettyUrl' => true, 'showScriptName'