如何放置<;li class=“;活动的”>;在Yii的导航菜单中


How to put <li class="active"> in navigation menu in Yii?

我在Yii工作,突然陷入了这种困境。问题是,到目前为止,我一直在使用CMenu,而在使用Bootstrap时,我使用的是TbMenu。

然而,在当前的项目中,我们创建了一个完全不同的菜单,里面有很多新的跨度和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>

所以基本上,当我访问特定的action/Controller时:它应该将class="active"放在li标记中。

请帮忙。

问候,

如果你想要一个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');
    });
});

我将此类用于li项目:

class="<?php echo (Yii::$app->controller->route == 'site/index') ? 'active' : '' ?>"

也可以使用Yii::$app->controller->id进行直接链接。

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'
                ),
            ),
        ),
    ),
)) ?>