Генерировать меню любой вложенности yii2

228
06 января 2018, 04:01

Всем доброго времени суток. Начал осваивать yii2, есть задача сгенерировать меню в виде дерева и заполнить его произвольными данными. Чтоб получилось типа такого:

Меню может быть из пяти, шести, семи узлов. То есть количество узлов я указываю при генерации. Алгоритм построения дерева - Nested Sets. То есть я указываю количество узлов и уже сгенерированное меню инсертится в БД по принципу Nested Sets. Подскажите пожалуйста как проще в yii2 выполнить такую задачку?

Answer 1

Самое простое, на мой взгляд это сформировать массив с категориями и рекурсивно пробегать по нему. Например:

$data = [
            [
                'name' => 'Автомобили',
                'children' => [
                    [
                        'name' => 'Мазда',
                        'children' => [
                            [
                                'name' => 'Мазда 3',
                            ],
                            [
                                'name' => 'Мазда 6'
                            ]
                        ]
                    ]
                ]
            ],
            [
                'name' => 'Мотоциклы',
                'children' => [
                    [
                        'name' => 'Кавасаки',
                    ],
                    [
                        'name' => 'Харлей',
                    ]
                ]
            ]
        ];
function createTreeExample($data, $parent = null) {
        foreach ($data as $item) {
            $category = new Category(['name' => $item['name']]);
            if(!isset($parent)) {
                $category->makeRoot();
            } else {
                $category->appendTo($parent);
            }
            if (!empty($item['children'])) {
                $this->createTreeExample($item['children'], $category);
            }
        }
    }

Методы makeRoot() и appendTo() из расширения yii2-nested-sets

READ ALSO
Выводит один массив вместо двух

Выводит один массив вместо двух

Через pdo вывожу записи из бд mysql проблема такая из бд должно выйти 2 записи а значит 2 массива но у меня 1 массив вот код

254
Обновление страницы без перезагрузки WooCommerce после чистки корзины

Обновление страницы без перезагрузки WooCommerce после чистки корзины

После очищения корзины, необходимо очистить контентную область

247
Почему не все файлы xls переданные методом POST обрабатываются плагином PHPSpreadsheet?

Почему не все файлы xls переданные методом POST обрабатываются плагином PHPSpreadsheet?

Поставил плагин PHPOffice/PHPSpreadsheet и пробую читать файлы екселя (xls, xlsx)Если кинуть файл на сервер и считать его, то всё нормально, его содержимое...

261
2018 год шифрование

2018 год шифрование

Необходимо зашифровать парольКакие способы и методы шифровки пароля актуальны на данный момент? А то слышал что md5 в два счета расшифровывается

213