Как в yii2 сделать древовидный выпадющий список без виджетов?

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
alexa777
Сообщения: 299
Зарегистрирован: 2016.03.01, 17:38

Как в yii2 сделать древовидный выпадющий список без виджетов?

Сообщение alexa777 »

Привет есть база category ('id', 'name', 'parent_id')

Вывожу список категорий

Код: Выделить всё

$form->field($model, 'parent_id')->dropDownList(Category::find()->select(['name', 'id'])->indexBy('id')->column(), ['prompt' => '']) 
Но так выводит все подряд вот такой массив
array(2) { [1]=> string(34) "Категория" [2]=> string(18) "Подкатегория" } array(1) { ["prompt"]=> string(0) "" }
Для того чтобы вывести их древовидно советуют сделать так

Код: Выделить всё

$items = [
        'Группа 1' => [
            0 => 'Элемент 1.1',
            1 => 'Элемент 1.2',
            2 => 'Элемент 1.3',
        ],
        'Группа 2' => [
            3 => 'Элемент 2.1',
        ],
    ];

$form->field($model, 'category_id')->dropDownList($items)

как это массив
array(2) { [1]=> string(34) "Категория" [2]=> string(18) "Подкатегория" } array(1) { ["prompt"]=> string(0) "" }
преобразовать в такой массив ?

Код: Выделить всё

 $items = [
        'Группа 1' => [
            0 => 'Элемент 1.1',
            1 => 'Элемент 1.2',
            2 => 'Элемент 1.3',
        ],
        'Группа 2' => [
            3 => 'Элемент 2.1',
        ],
    ];
urichalex
Сообщения: 994
Зарегистрирован: 2015.08.07, 11:03

Re: Как в yii2 сделать древовидный выпадющий список без виджетов?

Сообщение urichalex »

Если заранее известно, что в дереве всего максимум 2 уровня, то ArrayHelper::map() с третьим параметром, а если неизвестно, сколько уровней, то рекурсивно собирать дерево
alexa777
Сообщения: 299
Зарегистрирован: 2016.03.01, 17:38

Re: Как в yii2 сделать древовидный выпадющий список без виджетов?

Сообщение alexa777 »

urichalex писал(а): 2018.12.28, 09:55 Если заранее известно, что в дереве всего максимум 2 уровня, то ArrayHelper::map() с третьим параметром, а если неизвестно, сколько уровней, то рекурсивно собирать дерево
Вот так ?

Код: Выделить всё

<?=$form->field($model, 'parent_id')->dropDownList(ArrayHelper::map(Category::find()->all(),  'id', 'name', 'parent_id'), ['prompt' => '']);?>
Фигня получается
alexa777
Сообщения: 299
Зарегистрирован: 2016.03.01, 17:38

Re: Как в yii2 сделать древовидный выпадющий список без виджетов?

Сообщение alexa777 »

urichalex писал(а): 2018.12.28, 09:55 Если заранее известно, что в дереве всего максимум 2 уровня, то ArrayHelper::map() с третьим параметром, а если неизвестно, сколько уровней, то рекурсивно собирать дерево
и если есть возможность скиньте рекурсивное дерево как Вы строите
urichalex
Сообщения: 994
Зарегистрирован: 2015.08.07, 11:03

Re: Как в yii2 сделать древовидный выпадющий список без виджетов?

Сообщение urichalex »

Вы делаете выборки в представлении - это уже фигня)

Код: Выделить всё

$array = AdminNoty::find()
            ->alias('olo')
            ->select(['id' => 'olo.id', 'name' => 'olo.name', 'parentName' => 'parent.name'])
            ->joinWith('parent parent')
            ->all();
$list = ArrayHelper::map($array, 'id', 'name', 'parentName');
...
$form->field($model, 'attribute')->dropDownList($list);
Ответить