- 1、本文档共3页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
这篇文章主要为大家详细介绍了解决 yii2 左侧菜单子级无法高亮问题的方法,感兴趣的朋友可以参考一下
我们先来看看具体问题。
添加角色是属于角色这个菜单的, 如何在执行添加角色这个操作时让角色这个菜单处于选中状态呢?
adminlte 左侧导航的 Create,View 等 action 不能定位到 index 的模块(左侧二级导航不能展开定位)
如果你是按照我们上文的教程来的, 那接下来所要说明的问题应该不是问题, 先来看看
我们当时是怎么处理左侧菜单 menu 的
use mdm\admin\components\MenuHelper;nbsp;
lt;?phpnbsp;
$callback = function($menu){nbsp;
nbsp;// 鉴于篇幅有限,这里的代码省略,源码见于原文
};nbsp;
//这里我们对一开始写的菜单 menu 进行了优化
echo dmstr\widgets\Menu::widget( [nbsp;
nbsp;options =gt; [class =gt; sidebar-menu],nbsp;
nbsp;items =gt; MenuHelper::getAssignedMenu(Yii::$app-gt;user-gt;id, null,
$callback),nbsp;
] ); ?gt;
看到这里, 我们不妨打开文件 dmstr\widgets\Menu 看看这里是怎么实现左侧菜单选中这一困扰众多同学的问题。
protected function isItemActive($item)
{
nbsp;if (isset($item[url]) amp;amp; is_array($item[url]) amp;amp; isset($item[url][0])) {
nbsp; //......
nbsp; if ($arrayRoute[0] !== $arrayThisRoute[0]) {
nbsp; nbsp;return false;
nbsp; }
nbsp; if (isset($arrayRoute[1]) amp;amp; $arrayRoute[1] !== $arrayThisRoute[1]) { nbsp; nbsp;return false;
nbsp; }
nbsp; if (isset($arrayRoute[2]) amp;amp; $arrayRoute[2] !== $arrayThisRoute[2]) { nbsp; nbsp;return false;
nbsp; }
nbsp; //......
nbsp; return true;
nbsp;}
nbsp;return false;
}
看吧,看上面的代码, 也就是说左侧菜单激活的情况是当前路由完全等于菜单路由时菜
单才进行激活。
鉴于我们一开始谈到的不少小伙伴疑惑的两个问题,我们这里只需要稍稍调整下代码,
判断控制到 controller 而非 action 即可,但是源码文件我们又不能修改, 怎么办好呢?天热,凉拌。
这里我们拷贝 dmstr\widgets\Menu.php 文件到 backend\components\Menu.php ,然后按照下面的方法修改 isItemActive 方法即可
protected function isItemActive($item)
{
nbsp;if (isset($item[url]) amp;amp; is_array($item[url])
isset($item[url][0])) {
nbsp; nbsp;
nbsp; //......
nbsp; // 改写了路由的规则,是否高亮判断到 controller 而非 action
nbsp; $routeCount = count($arrayRoute);
nbsp; if ($routeCount == 2) {
amp;amp;
nbsp; nbsp;if ($arrayRoute[0] !== $arrayThisRoute[0]) {
nbsp; nbsp; return false;
nbsp; nbsp;}
nbsp; } elseif ($routeCount == 3) {
nbsp; nbsp;if ($arrayRoute[0] !== $arrayThisRoute[0]) {
nbsp; nbsp; return false;
nbsp; nbsp;}
nbsp; nbsp;if (isset($arrayRoute[1]) amp;amp; $arrayRoute[1] !== $arrayThisRoute[1]) {
nbsp;
文档评论(0)