如何将 <li class="active"> 放在 Yii 的导航菜单中?
Posted
技术标签:
【中文标题】如何将 <li class="active"> 放在 Yii 的导航菜单中?【英文标题】:How to put <li class="active"> in navigation menu in Yii? 【发布时间】:2013-07-30 06:54:11 【问题描述】:我在 Yii 工作,突然陷入了这个困境。问题是,到目前为止,我使用的是 CMenu,而在使用 Bootstrap 时,我使用的是 TbMenu。
但是,在当前的项目中,我们创建了一个完全不同的菜单,其中包含许多新的 span 和 div,因此将其与当前的 TbMenu 或 Cmenu 集成非常困难,因此我们将菜单 html和主布局一样。但是,现在当我访问任何视图时,它应该将适当的“活动”类放在菜单列表项中。
TbNavbar 和 CMenu 能够自动实现这一点,但是我无法为我的视图实现它。
例如:
我有这个作为我的导航栏:
所以当我像这样访问“someController/actionSomthing”时:
www.localhost.com/someController/actionSomthing
<nav>
<ul id="blah">
<li class="active"><a href ="#" >Something</a></li>
<li><a href ="#" >Something else</a></li>
<li><a href ="#" >another something</a></li>
</ul>
</nav>
所以基本上当我访问特定的动作/控制器时:它应该把 class= "active" 放在 li 标签中。
请帮忙。
问候,
【问题讨论】:
您的菜单代码是秘密? $().addClass('active') 没有? 请重新检查问题,我已经修改了一点。 @ineersa 没有 jquery 就不可能吗? 如果您想编写自己的 cmenu 可以)。你可以扩展 CWidget 并做你想做的事。看这里github.com/mrkmg/yii-ext-cssmenu/blob/master/cssmenu/…反正我用js做起来更容易。 我找到了一种方法来通过编辑核心文件来实现,特别是更改视图的呈现方式。但是,我确定这种方法绝对不推荐我确定? 【参考方案1】:如果你想要一个 JS/jQuery 解决方案,你可以试试这个:
$(function()
var loc = window.location.href;
$('#blah li').each(function()
var link = $(this).find('a:first').attr('href');
if(loc.indexOf(link) >= 0)
$(this).addClass('active');
);
);
【讨论】:
是的。我使用类似于 wrap cssmenu 扩展的东西。【参考方案2】:我将这个类用于li
项目:
class="<?php echo (Yii::$app->controller->route == 'site/index') ? 'active' : '' ?>"
您也可以使用Yii::$app->controller->id
进行直接链接。
【讨论】:
【参考方案3】:TbMenu
继承自 CMenu
。在当前项目中使用active
:
<?php $this->widget('bootstrap.widgets.TbNavbar', array(
'collapse'=>true,
'htmlOptions'=>array('role'=>'navigation'),
'items'=>array(
array(
'class'=>'bootstrap.widgets.TbMenu',
'items'=>array(
array(
'label'=>'Consultas',
'url'=>array('/someController/actionSomthing'),
'visible'=>Yii::app()->user->checkAccess('someController'),
'active'=>Yii::app()->controller->id=='someController'
),
),
),
),
)) ?>
【讨论】:
以上是关于如何将 <li class="active"> 放在 Yii 的导航菜单中?的主要内容,如果未能解决你的问题,请参考以下文章
<ul>标签两层嵌套如何在js中找到第二层<li>标签,不用获取id的方法。两层<li>标签的class是一样的。