Nav::widget не выставляет класс active для ссылки для главной страницы

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
droot
Сообщения: 4
Зарегистрирован: 2021.12.20, 23:18

Nav::widget не выставляет класс active для ссылки для главной страницы

Сообщение droot »

Приветствую, собственно, используею Nav::widget для вывода навбара, но заметил что класс active для выделения раздела в котором находишься не выставляется для main. При этом для ссылок которые не 404 возращается класс выставляется

Код: Выделить всё

<nav class="navbar navbar-expand-lg navbar-dark bg-dark fixed-top">
    <div class="container-fluid">
        <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarTogglerDemo01" aria-controls="navbarTogglerDemo01" aria-expanded="false" aria-label="Toggle navigation">
            <span class="navbar-toggler-icon"></span>
        </button>
        <div class="collapse navbar-collapse" id="navbarTogglerDemo01">
            <a class="navbar-brand" href="#">Hidden brand</a>
            <?php
            $menuItems = [
                ['label' => 'main', 'url' => ['/']],
                ['label' => 'Form', 'url' => ['/site/form']],
                ['label' => 'About', 'url' => ['/site/about']],
                ['label' => 'FAQ', 'url' => ['/site/faq']],
            ];
            echo Nav::widget([
                'options' => [
                        'class' => 'navbar-nav ms-auto mb-2 mb-lg-0',
                ],
                'items' => $menuItems,
            ]);
            ?>
        </div>
    </div>
</nav>
Если нахожусь к примеру на страницы FAQ domain.com/site/faq то полученный HTML

Код: Выделить всё

<ul id="w0" class="navbar-nav ms-auto mb-2 mb-lg-0 nav" activecssclass="active"><li class="nav-item"><a class="nav-link" href="/">main</a></li>
<li class="nav-item"><a class="nav-link" href="/site/form">Form</a></li>
<li class="nav-item"><a class="nav-link" href="/site/about">About</a></li>
<li class="nav-item"><a class="nav-link active" href="/site/faq">FAQ</a></li></ul>
А если на / - domain.com

Код: Выделить всё

<ul id="w0" class="navbar-nav ms-auto mb-2 mb-lg-0 nav" activecssclass="active"><li class="nav-item"><a class="nav-link" href="/">main</a></li>
<li class="nav-item"><a class="nav-link" href="/site/form">Form</a></li>
<li class="nav-item"><a class="nav-link" href="/site/about">About</a></li>
<li class="nav-item"><a class="nav-link" href="/site/faq">FAQ</a></li></ul>
не могу найти в доке причины этого поведения. Как это поправить в рамках настройки виджета?

Есть теория что '/' != '' т.е domain.com != domain.com/ но нет понимания как скормить это виджету
droot
Сообщения: 4
Зарегистрирован: 2021.12.20, 23:18

Re: Nav::widget не выставляет класс active для ссылки для главной страницы

Сообщение droot »

Ну в целом продебажил и так и есть, только проблемав том что роут главной страницы и роут акшоне не совпадают

Код: Выделить всё

            if (ltrim($route, '/') !== $this->route) {
                return false;
            }
Последний раз редактировалось droot 2021.12.20, 23:54, всего редактировалось 1 раз.
droot
Сообщения: 4
Зарегистрирован: 2021.12.20, 23:18

Re: Nav::widget не выставляет класс active для ссылки для главной страницы

Сообщение droot »

Может сработал эффект уточки, и не знаю насколько верно такое решение но в итоге сделал так

Код: Выделить всё

            $actionId = $this->context->action->id;
            $menuItems = [
                ['label' => 'main', 'active'=> $actionId === 'index', 'url' => ['/']],
                ['label' => 'Form', 'url' => ['/site/form']],
                ['label' => 'About', 'url' => ['/site/about']],
                ['label' => 'FAQ', 'url' => ['/site/faq']],
            ];
Аватара пользователя
Dominus
Сообщения: 892
Зарегистрирован: 2013.03.14, 21:27
Откуда: Россия, Иваново
Контактная информация:

Re: Nav::widget не выставляет класс active для ссылки для главной страницы

Сообщение Dominus »

Код: Выделить всё

$menuItems = [
    ['label' => 'main', 'url' => ['/site/index']],
    //...
];
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!
droot
Сообщения: 4
Зарегистрирован: 2021.12.20, 23:18

Re: Nav::widget не выставляет класс active для ссылки для главной страницы

Сообщение droot »

Так а что это решает? Понятно что это сработает только майн роут определен в дефолте и ничто не мешает напрямую обратьстся к индексу, тогда получится таже самая страница но без активного элемента навбара.
Аватара пользователя
Dominus
Сообщения: 892
Зарегистрирован: 2013.03.14, 21:27
Откуда: Россия, Иваново
Контактная информация:

Re: Nav::widget не выставляет класс active для ссылки для главной страницы

Сообщение Dominus »

Если указать так, то будет отображаться ссылка как активная

Код: Выделить всё

$menuItems = [
    ['label' => 'main', 'url' => ['/site/index']],
    //...
];
Если так, то не будет

Код: Выделить всё

$menuItems = [
    ['label' => 'main', 'url' => ['/']],
    //...
];
https://github.com/yiisoft/yii2-bootstr ... #L259-L268

Ну а что бы экшен index не отображался, добавить в правила urlManager:

Код: Выделить всё

'urlManager' => [
    'enablePrettyUrl' => true,
    'showScriptName' => false,
    'rules' => [
        '' => 'site/index',
        //...
    ],
],
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!
Ответить