2016-05-04 2 views
5

У меня есть Nav с пунктами:Yii2 Nav виджет: активный элемент

[ 
    'label' => 'All', 
    'url' => ['project/index'], 
], 
[ 
    'label' => 'Done', 
    'url' => ['project/index', 'assigned' => 'done'], 
], 

Но оба они имеют active класс, когда я иду к проекту/индекс & назначен = сделано. Как я могу принудительно присоединить этот класс, только если значение url элемента строго соответствует значению $route?

ответ

1

Nav виджет сделает элемент активен, если его маршрут и параметры соответствуют $route (если не установлен, то он будет использовать маршрут текущего запроса) и $params (если не установлен, то он будет использовать $ _GET).

Ваш первый объект всегда будет активным, если маршрут project/index (посмотреть here).

Вы должны попробовать это, например:

[ 
    'label' => 'All', 
    'url' => ['project/index', 'assigned' => 'not-done'], 
], 
[ 
    'label' => 'Done', 
    'url' => ['project/index', 'assigned' => 'done'], 
], 

Подробнее о how Nav widget set an item active or not.

+0

Благодарим за ссылки. Они полезны. – Dmytro

0
$actionId = $this->context->action->id; // the id of the actual action 

$items = [ 
    ['label' => 'All', 'active' => $actionId === 'index', 
     'url' => ['/project/index'], 
    ['label' => 'Done', 'active' => $actionId === 'index' 
     && \Yii::$app->request->get('assigned') === 'done', 
     'url' => ['/project/index', 'assigned' => 'done']] 
]; 
Смежные вопросы