Yii2 Kartik SideNav Как установить «активную» опцию

У меня есть SideNav Картика (http://demos.krajee.com/sidenav-demo/profile/default) работает правильно, устанавливая URL-адрес для контроллера/действия, но не понимаю, как установить активную опцию, чтобы меню оставалось открытым, а правильный пункт меню оставался выбранным.

Я пробовал устанавливать «active» => «controller/action» (см. ниже), а также «active» => «controller/action/default#demo», но безрезультатно. Когда я устанавливаю его как «employee/employee-dashboard/default#demo», он сохраняет эту вкладку выделенной, но не меняет другие, когда я делаю то же самое на этих вкладках. В оригинале было установлено значение «active» => «home», что, как я полагаю, является просто действием, но у меня это тоже не сработало.

            $type = SideNav::TYPE_DEFAULT;
            $heading = '<i class="glyphicon glyphicon-cog"></i> Employee Menu';
            $item = '/employee/employee-dashboard/default#demo';

echo SideNav::widget([
                'type' => $type,
                'encodeLabels' => false,
                'heading' => $heading,
                'items' => [
                    // Important: you need to specify url as 'controller/action',
                    // not just as 'controller' even if default action is used.
                    //
                    // NOTE: The variable `$item` is specific to this demo page that determines
                    // which menu item will be activated. You need to accordingly define and pass
                    // such variables to your view object to handle such logic in your application
                    // (to determine the active status).
                    //
                    ['label' => 'Dashboard', 'icon' => 'home', 'url' => Url::to(['/employee/employee-dashboard', 'type'=>$type]), 'active' => ($item == '/employee/employee-dashboard/default#demo')]

                    ['label' => 'Paycheck Info', 'icon' => 'book', 'items' => [
                        ['label' => '<span class="pull-right badge">10</span> W2 Forms', 'url' => Url::to(['/employee/w2-form', 'type'=>$type]), 'active' => ($item == 'w2-form')],

person Mark Cross    schedule 17.12.2016    source источник
comment
Я просто хочу некоторых разъяснений. Вы хотите установить строку меню (которая представляет собой раскрывающийся список) на active, и она должна оставаться открытой со всеми своими дочерними элементами?   -  person Gytis TG    schedule 18.12.2016


Ответы (2)


Одно решение, которое я нашел, если вы хотите установить активный пункт меню для каждой страницы:

Создайте отдельный файл представления (например, sidemenu.php) только с виджетом SideNav, который принимает параметр под названием «currentPage».

echo SideNav::widget([
    'type' => SideNav::TYPE_DEFAULT,
    'heading' => 'Options',
    'items' => [
       [
          'url' => Url::toRoute('/site/index'),
          'label' => 'Home',
          'icon' => 'file',
          'active'=>($currentPage == 'home'),
       ],
       [
          'url' => Url::toRoute('/site/about'),
          'label' => 'About',
          'icon' => 'file',
          'active'=>($currentPage == 'about'),
       ],

Затем на странице просмотра, где вы отображаете меню, установите свойство currentPage, например:

echo $this->render('sidemenu', ['currentPage'=>'home']);

или echo $this->render('sidemenu', ['currentPage'=>'about']);

person Mark Cross    schedule 19.12.2016

person    schedule
comment
Спасибо! Это очень элегантное решение, позволяющее использовать его из файла макета для многих страниц. Единственное другое решение, которое я нашел (всего несколько минут назад) и которое я опубликую ниже, заставляет вас использовать его на отдельных страницах. - person Mark Cross; 19.12.2016