villiwalla
@villiwalla
HTML-верстка

Как установить класс активного пункта меню, в Nav::widget?

В БД есть таблица, которой заполняется массив items в Nav. Для страниц, у которых указан template_name есть контроллер Article и дефолтный метод index.
+----+------------------------------+-----------+---------------+---------------+
| id | title                        | type      | url           | template_name |
+----+------------------------------+-----------+---------------+---------------+
|  5 | О фабрике                    | page      | /about        | article       |
|  6 | Новинки                      | page      | /products/new | main          |
|  7 | Каталог                      | container | /catalog      | main          |
|  8 | Сотрудничество               | page      | /partners     | article       |
|  9 | Мастерская                   | page      | /master_class | main          |
| 10 | Новости                      | container | /news         | main          |
| 11 | Контакты                     | page      | /contacts     | main          |
+----+------------------------------+-----------+---------------+---------------+


В UrlManager указал правила для открытия страниц под указанным урл в БД
'rules' => [
                '/about' => 'article/index',
                '/partners' => 'article/index',
            ],


Но из-за данной подхода (велосипеда?), Nav не устанавливает класс активного пункта меню, посколько уры не выглядят "Контроллер/Метод", но мне нужный разные урлы, которые вручную устанавливаются (предполагается ручная установка) в бэкенде приложения.

Как решить установку класса активного пункта меню, в данной ситуации?
  • Вопрос задан
  • 224 просмотра
Решения вопроса 1
qonand
@qonand
Software Engineer
Ваша проблема связана с тем что по умолчанию виджет Nav берет текущий роут из контроллера который вызван и без учета url-правил. Решить эту проблему можно задав route для Nav самостоятельно, например так:
<?= Nav::widget([
    'route' => Yii::$app->getRequest()->pathInfo,
    'items' => $items
]);
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
Я думаю что как минимум должно быть так:
'rules' => [
                '/<url>' => 'article/index',
            ],

и экшен
public function actionIndex($url){
   return $this->render('some_view',[
      'model' => SomeModel::findOne(['url'=>$url]);
   ]);
}
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы