@gachkydxvbgd

Как получить дерево в yii2?

category - id , name
category_two - id, category_id, name

Вывести нужно
- menu
      - menu
      - menu
 - menu
      - menu
      - menu


Пробовал через https://github.com/paulzi/yii2-adjacency-list

public static function find()
    {
        return new SampleQuery(get_called_class());
    }

Эта функция выдает ошибку

Как это можно реализовать без сторонних либ?
  • Вопрос задан
  • 680 просмотров
Решения вопроса 1
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
Расширение которое Вы привели позволяет управлять хранением дерева, а не построением из него html списка. И работает оно отлично.
А Вот вывод дерева может быть разный, зависит от уровней вложенности. Главный минус принципа "adjacency list" как раз вывод. Если вложенность неизвестна, надо писать рекурсивную функцию, а если уровня 2, то обычным перебором.
Например формируем для виджета меню массив с нужной иерархией.
public static function getMenuList(){
      $root = self::findOne(2); //2 это id root элемента 
      $leaves = $root->getChildren()->with('children')->all();
      return \yii\helpers\ArrayHelper::toArray(
          $leaves,
          [
              'common\models\Menu'=>[ //namespace модели
                  'label'=>'name',
                  'items'=> function($model){
                    return \yii\helpers\ArrayHelper::toArray(
                        $model->children,
                        [
                            'common\models\Menu'=>[
                                'label'=>'name',
                            ]
                        ]
                    );
                  },
              ]
          ]
      );

Планировал по этому расширению как раз видео сегодня записать, будет тут вечером:
https://www.youtube.com/channel/UC3jTSXXgSvQI2WJ5f...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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