Задача: автоматически выделять активные пункты меню в зависимости от 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’, даже если используется действие по умолчанию.