@kuliev_a

Yii2 как сделать подсветку активного пункта меню?

Доброго времени суток коллеги.
Не давно начал изучать фреймворк Yii2, и все вроде бы ничего, но не могу его заставить корректно подсвечивать (делать активным элемент) меню.

Что мы имеем:
Две таблицы связь один ко многим.
Первая таблица с наименованием категорий (из нее делается менюшка)
Вторая статьи для каждой категории.

В Nav нужно указывать URL в виде контроллер/акшин (site/index) что в свою очередь появляется в адресной строке URL.

Мой массив для Nav::Widget();
Array
(
    [items] => Array
        (
            [0] => Array
                (
                    [label] => Главная
                    [url] => Array
                        (
                            [0] => /site/index
                        )

                    [linkOptions] => Array
                        (
                            [title] => Главная
                        )

                )

            [1] => Array
                (
                    [label] => Вело
                    [url] => Array
                        (
                            [0] => /bike
                        )

                    [linkOptions] => Array
                        (
                            [title] => Вело
                        )

                )
            [2] => Array
                (
                    [label] => Авто
                    [url] => Array
                        (
                            [0] => /cars
                        )

                    [linkOptions] => Array
                        (
                            [title] => Авто
                        )
                )
        )
);


Мне хочется чтобы ссылки категорий выглядели так:

site.ru/cars
site.ru/bike
site.ru/....

И все это дело обрабатывал скажем category/index

Как вы понимаете при таком подходе Nav не может отловить какой пункт меню ему подсвечивать. У кого есть опыт в данном вопросе посоветуйте, что делать?
  • Вопрос задан
  • 208 просмотров
Пригласить эксперта
Ответы на вопрос 2
@vuldozer
Почему бы не сделать это непосредственно на странице, с помощью js. Решается крайне просто, вроде бы
Ответ написан
@kuliev_a Автор вопроса
В общем решил пока таким способом, посмотрим как он себя зарекомендует.

public function isActive($alias)
    {
        $url = $_SERVER["REQUEST_URI"];

        //Маршрут по default
        if($alias == 'site/index' and $url == '/')
            return true;
        
        //Короткие маршруты категорий
        if(strpos($url, $alias) !== false)
            return true;
        else
            return false;
    }

    //Шаблон для вывода меню в виде дерева
    private function tplMenu($item)
    {
        $items = [
            [
                'label' => $item['name'],
                'url'   => [$item['alias']],
                'linkOptions' => ['title' => $item['title']],
                'active'=> $this->isActive($item['alias']),
            ],
        ];
        if(isset($item['childs']))
        {
            $label = ['label' => $item['name'],];

            foreach ($item['childs'] as $key => $val)
                $items['items'][] = ['label' => $val['name'], 'url' => $val['alias'], 'linkOptions' => ['title' => $val['title']],];

            $items = array(array_merge($label, $items));
        }
        return  $items;
    }
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы