Yii2使用yii2-adminlte+yii2-admin左侧菜单子路径不高亮问题又解。 [ 2.0 版本 ]
参考网站内“白狼栈”大神的文章。不多说,直接上代码:
protected function isItemActive($item)
{
if (isset($item['url']) && is_array($item['url']) && isset($item['url'][0])) {
$route = $item['url'][0];
if ($route[0] !== '/' && Yii::$app->controller) {
$route = ltrim(Yii::$app->controller->module->getUniqueId() . '/' . $route, '/');
}
$route = ltrim($route,'/');
$route = explode('/', $route);
$path = explode('/', $this->route);
if ($route[1] != $path[1] && $route !== $this->noDefaultRoute && $route !== $this->noDefaultAction) {
return false;
}
return true;
}
return false;
}
天黑请闭眼
注册时间:2016-10-31
最后登录:2018-12-20
在线时长:7小时42分
最后登录:2018-12-20
在线时长:7小时42分
- 粉丝2
- 金钱750
- 威望10
- 积分920
共 3 条评论
兄弟你这个再上个效果图就更好了
放到我的代码里有module的 /module/controller/action路径没问题,如果是没有module的/controller/action路径就只能是全等的时候才高亮。
我增加了一段 如果当前path是2个元素 就是没有module的,比较下标为0也就是第一个元素,如果是3个元素就是有module的,比较下标为1也就是第二个元素
$route = ltrim($route,'/'); $route = explode('/', $route); $path = explode('/', $this->route); /*下面是增加的部分start*/ $pathCount=count($path); if ($pathCount == 2 && $route[0] != $path[0] && $route !== $this->noDefaultRoute && $route !== $this->noDefaultAction) { return false; } /*上面是增加的部分end*/ //下面要判断$pathCount==3 if ($pathCount == 3 && $route[1] != $path[1] && $route !== $this->noDefaultRoute && $route !== $this->noDefaultAction) { return false; }
官方最新版本(2.6.0)已经解决了这个问题,可以达到子菜单级别的高亮:
` /**
* Checks whether a menu item is active. * This is done by checking if [[route]] and [[params]] match that specified in the `url` option of the menu item. * When the `url` option of a menu item is specified in terms of an array, its first element is treated * as the route for the item and the rest of the elements are the associated parameters. * Only when its route and parameters match [[route]] and [[params]], respectively, will a menu item * be considered active. * @param array $item the menu item to be checked * @return boolean whether the menu item is active */ protected function isItemActive($item) { if (isset($item['url']) && is_array($item['url']) && isset($item['url'][0])) { $route = $item['url'][0]; if ($route[0] !== '/' && Yii::$app->controller) { $route = ltrim(Yii::$app->controller->module->getUniqueId() . '/' . $route, '/'); } $route = ltrim($route, '/'); if ($route != $this->route && $route !== $this->noDefaultRoute && $route !== $this->noDefaultAction) { return false; } unset($item['url']['#']); if (count($item['url']) > 1) { foreach (array_splice($item['url'], 1) as $name => $value) { if ($value !== null && (!isset($this->params[$name]) || $this->params[$name] != $value)) { return false; } } } return true; } return false; }`
我用的最新版,也不能显示,不知道是不是自己写的有问题!