解决yii2左侧菜单子级无法高亮问题的方法
我们先来看看具体问题。 use mdmadmincomponentsMenuHelper; lt;#63;php $callback = function($menu){ //鉴于篇幅有限,这里的代码省略,源码见于原文 }; //这里我们对一开始写的菜单menu进行了优化 echo dmstrwidgetsMenu::widget( [ 'options' =gt; ['class' =gt; 'sidebar-menu'], 'items' =gt; MenuHelper::getAssignedMenu(Yii::$app-gt;user-gt;id, null, $callback), ] ); #63;gt; 看到这里,我们不妨打开文件dmstrwidgetsMenu看看这里是怎么实现左侧菜单选中这一困扰众多同学的问题。 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即可,但是源码文件我们又不能修改,怎么办好呢?天热,凉拌。 这里我们拷贝dmstrwidgetsMenu.php文件到backendcomponentsMenu.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文件修改其指向到backendcomponentsMenu use backendcomponentsMenu; echo Menu::widget([ 'options' =gt; ['class' =gt; 'sidebar-menu'], 'items' =gt; MenuHelper::getAssignedMenu(Yii::$app-gt;user-gt;id, null, $callback), ]); 快去试试看我们的问题解决没有吧。 (编辑:网站开发网_马鞍山站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |