Yii2 → Выделить активные пункты меню

Задача: автоматически выделять активные пункты меню в зависимости от url страницы, при переходе между страницами соответствующий пункт меню должен становиться активным (добавляется класс active или open).

Решение:

В представлении

<?= Menu::widget([
    'options' => ['class' => 'menu-links'],
    'items' => [        
        ['label' => 'Главная', 'url' => ['site/index']],
        ['label' => 'О сайте', 'url' => ['site/about']],
        ['label' => 'Каталог', 'url' => ['catalog/index']],
        ['label' => 'Войти', 'url' => ['site/login'], 'visible' => Yii::$app->user->isGuest],
    ],
    'activeCssClass' => 'active',
]);
?>

В конфиге можно указать правила:

'components' => [
    'urlManager' => [
        'enablePrettyUrl' => true,
        'showScriptName' => false,
        'rules' => [
            'about' => 'site/about',
            'login' => 'site/login',
            'catalog' => 'catalog/index',
        ],
    ],
],

Тогда ссылки будут иметь красивый сокращенный вид.

На выходе будет построен ul > li список ссылок (меню). И если текущая страница будет совпадать с указанным в url значением, то пункт меню будет выделен активным (задан классом activeCssClass).

Важно: необходимо указывать URL вида 'контроллер/действие',
а не в сокращенной форме ‘/catalog’, даже если используется действие по умолчанию.

 

  • Alexander Bulatov

    Огромное спасибо!
    О таких мелочах как полный путь не знал)
    Оказалось, что для подтверждения виджетом Menu, что пункт активный нужен полный путь.

    Ещё раз спасибо!

  • HiStO rIaN

    сейчас бы в 21 веке гавновиджетами гавно yii2 пользоваться…. лучше бы обьяснил как в нормальном меню сделать активной кнопку, убогий фреемворк нихера не делает