2016-02-10 3 views
1

Я настраиваю небольшую страницу, поэтому я удалил/сайт/из URL. Большинство страниц будут статичными страницами на контроллере сайта, поэтому это выглядит чище.Управление активными пунктами меню

виджет меню настраивается следующим образом:

$menuItems = [ 
    ['label' => 'Home', 'url' => ['/']], 
    ['label' => 'About', 'url' => ['/about']], 
    ['label' => 'Projects', 'url' => ['/projects']], 
]; 

И правило конфигурации является

'rules' => [ 
    '<controller:\w+>/<id:\d+>' => '<controller>/view', 
    '<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>', 
    '<controller:\w+>/<action:\w+>' => '<controller>/<action>', 
    '<action:\w+>' => 'site/<action>', 
], 

Теперь моя проблема в том, что мое меню ссылка пункта больше не помечена как активные (CSS .active) , Что контролирует это, и как я могу его изменить?

ответ

4

решаемая.

Изменение MenuItems как этот

$menuItems = [ 
    ['label' => 'Home', 'url' => ['/'], 'active' => $this->context->route == 'site/index'], 
    ['label' => 'About', 'url' => ['/about'], 'active' => $this->context->route == 'site/about'], 
    ['label' => 'Projects', 'url' => ['/projects'], 'active' => $this->context->route == 'site/projects'], 
]; 
+0

Есть ли способ активировать имя контроллера –

+0

Если у вас есть связанный с этим вопрос, вы должны [спросить] (http://stackoverflow.com/questions/ask) отдельный вопрос и ссылку/указать этот вопрос. Таким образом, @Beate может оставить ответ на этот вопрос (вместо этого вопроса, где это не должно быть) –

-1

Я использую этот код в yii2 для лучшего меню:

\yii\widgets\Menu::widget([ 
    'submenuTemplate' => "\n<ul class='top-nav-menu'>\n{items}\n</ul>\n", 
    'activateParents' => false, 
    'activeCssClass' => 'active', 
    'id' => 'sandwich-menu', 
     ['label' => Yii::t('app', 'Education'), 'url' => ['/site/education'] ], 
     [ 
      'label' => Yii::t('app', 'Entertainment'), 
      'url' => '#', 
      'items' => [ 
       ['label' => Yii::t('app', 'Games'), 'url' => ['/site/games']], 
       ['label' => Yii::t('app', 'Music'), 'url' => ['/site/music'] ], 
       ['label' => Yii::t('app', 'Videos'), 'url' => ['/site/videos'] ], 
       ['label' => Yii::t('app', 'Chat & Forum'), 'url' => ['/site/forum'] ], 
       ['label' => Yii::t('app', 'Clubs'), 'url' => ['/site/clubs'] ] 
      ] 
     ], 
     ['label' => Yii::t('app', 'News'), 'url' => ['/site/news']], 
     ['label' => Yii::t('app', 'Contact'), 'url' => ['/site/gencol'] ] 
    ] 
]) 
+0

Это не отвечает на вопрос каким-либо образом или формой, не так ли? –

+0

'activeCssClass' => 'active' code добавляет активный класс для меню –

+1

Ну, activeCssClass по умолчанию является «.active». С другой стороны, проблема здесь заключается в том, что пункты меню не зарегистрированы как активные, когда контроллер удален из URL-адреса. –

0

Вы должны использовать 'url' => [controller/action], чтобы получить эту вещь сделано. И эта конфигурация будет перезаписана вами правилами. Итак, а затем класс .active будет добавлен автоматически.

Смежные вопросы