@LemToUp

Yii2 виджеты NAV и MENU не принимают массив?

Помогите разобраться, в виджеты Yii2 nav и menu можно передавать массивы для построения меню.
Без массива это выглядит примерно так:
'items' => [
                    ['label' => 'Home Page', 'url' => ['site/']],
                    ['label' => 'About Us', 'url' => ['site/about']],
                    ['label' => 'News Events', 'url' => ['site/event']],
                    ['label' => 'Services', 'url' => ['site/service']], 
]

С массивом так:
'items' => [
                    Category::CategoryMenu(),
                ],

И вылазит проблема - если массив одномерный, то все нормально за исключением одного единственного пункта меню:
Array ( [label] => Tamen causa ut diam [url] => Array ( [0] => /site/category?id=4 ) )

Как только сую многомерный массив, NAV сразу выдает ошибку, MENU ничего не выводит:
Array ( [0] => Array ( [label] => Appellatio vel hos autem [url] => Array ( [0] => /site/category?id=5 ) ) [1] => Array ( [label] => Consequat [url] => Array ( [0] => /site/category?id=6 ) ) [2] => Array ( [label] => Illum secundum [url] => Array ( [0] => /site/category?id=3 ) ) [3] => Array ( [label] => Illum secundum1 [url] => Array ( [0] => /site/category?id=8 ) ) [4] => Array ( [label] => Nibh valde tincidunt [url] => Array ( [0] => /site/category?id=7 ) ) [5] => Array ( [label] => Tamen causa ut diam [url] => Array ( [0] => /site/category?id=4 ) ) )

Функция в которой вытаскиваю массив выглядит так:
public static function CategoryMenu() {
        $item=[];
        $categories=Category::find()->orderBy('title')->all();
        foreach ($categories as $category) {
            $item[]= array(
                'label'=>$category['title'],
                'url'=>array('/site/category?id='.$category['id'])
        );
        }
        return $item;
    }

Переносить код во вьюшку не хочется, а вытянуть с модели не получается.
  • Вопрос задан
  • 882 просмотра
Решения вопроса 1
@Glimor
develop
Поддерживаю Андрей Клюев, еще url задаешь не совсем правильно (хотя и твой вариант наверно подойдет) в
public static function CategoryMenu() { }
Попробуй так:
$item['items']= [
                'label'=>$category['title'],
                'url'=>['/site/category', 'id' => $category['id']]
        ];

P.S. у тебя не правильная структура массива получается, ключом для подмассива, должно быть 'items'
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Может все-таки так нужно:
'items' => Category::CategoryMenu(),
Ответ написан
Ваш ответ на вопрос

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

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