Построение дерева
Построение дерева
Подскажите средства при помощи которых можно построить деревья, на подобие kartik-v TreeView
Два варианта построения дерева
при помощи root, left, right, level (и т.д. поля для дерева) или через id и parent_id записей.
Чтобы была подгрузка веток (возможно ajax подгрузка), мультиселек/одинарный выбор.
Т.к. вывод сразу 12к записей притормаживают систему. (дерево отображается в форме, которую юзер заполняет часто).
Как вариант еще с подключенной версионностью данных.
Два варианта построения дерева
при помощи root, left, right, level (и т.д. поля для дерева) или через id и parent_id записей.
Чтобы была подгрузка веток (возможно ajax подгрузка), мультиселек/одинарный выбор.
Т.к. вывод сразу 12к записей притормаживают систему. (дерево отображается в форме, которую юзер заполняет часто).
Как вариант еще с подключенной версионностью данных.
Re: Построение дерева
Попробуйте.
Дерево выбирается одним запросом, но потом рекурсиями строится для формата удобного к выводу.
Ничто не мешает кешировать.
Дерево выбирается одним запросом, но потом рекурсиями строится для формата удобного к выводу.
Ничто не мешает кешировать.
Re: Построение дерева
Построение дерева таким образом не устроит, т.к. справочник будет приходить из вне. И предположительно два варианта каким образом он может быть сделан через root-left-right-level или через parent_id. Да и у того же kartik-v есть кэширование в виджете.maleks писал(а): ↑2019.12.14, 07:21 Попробуйте.
Дерево выбирается одним запросом, но потом рекурсиями строится для формата удобного к выводу.
Ничто не мешает кешировать.
Явно не будет в справочнике path и weight
А вообще может быть сделано через root-left-right-level и parent_id одновременно
Но суть в ajax подгрузке данных, чтобы вывело сразу первый уровень дерева, а дальше при открытии открывалось остальное.
Или придется писать свой widget с ajax подгрузкой и шл...
Да и просто построить дерево это не проблема. Функционировать должно точно так же как у него
Дерево kartik-v
-
- Сообщения: 910
- Зарегистрирован: 2019.08.13, 01:49
Re: Построение дерева
А где и как хранится пришедший справочник?
Re: Построение дерева
Нашел то что нужно DropdownTree, но проблема в том, что после сохранения из таблицы выводится верхний уровень дерева. Остальные идентификаторы установились, но не отображаются.
Может кто посмотрит и подскажет установку значений из БД, если внес значения уже.
Первоначальное наполнение
Установлена ajax подгрузка данных при разворачивании дерева.
Может кто посмотрит и подскажет установку значений из БД, если внес значения уже.
Первоначальное наполнение
Код: Выделить всё
$firts_node = [];
$tree = MyClass::find()->where(['parent_id' => 0])->orderBy(['id' => SORT_ASC, 'name' => SORT_ASC])->all();
foreach($tree as $v){
$firts_node[] = ['id' => $v->id, 'label' => $v->name, 'items' => []];
}
Re: Построение дерева
Справочник будет храниться в БД.
Т.к. не понятно с какой структурой сделано два справочника один использует root-left-right-level для построения дерева, другой parent_id.
-
- Сообщения: 910
- Зарегистрирован: 2019.08.13, 01:49
Re: Построение дерева
Сделайте один с полями left, right, depth, parent_id и ставите https://github.com/creocoder/yii2-nested-sets.
Если пришло в виде nested sets, то просто загонятете в справочник данные и прописываете parent_id через model->parents(1). Если пришло в виде adjacency list то загоняете через $model->makeRoot() и $model->appendTo, прописывая также parent_id. И дальше можете использовать как nested sets виджеты (того же картика), так и adjacency list.
Re: Построение дерева
В виджете картика используется креокодер. Суть в том, чтобы был выпадающий список в виде дерева, где будет работать ajax подгрузка данных и будет выбор как одного, так и множественный выбор с сохранением в БД. В принципе dropdowntree подходит, но он не обновлялся уже давненько и там есть ньюансы.yiiliveext писал(а): ↑2019.12.16, 16:40 Сделайте один с полями left, right, depth, parent_id и ставите https://github.com/creocoder/yii2-nested-sets.
Если пришло в виде nested sets, то просто загонятете в справочник данные и прописываете parent_id через model->parents(1). Если пришло в виде adjacency list то загоняете через $model->makeRoot() и $model->appendTo, прописывая также parent_id. И дальше можете использовать как nested sets виджеты (того же картика), так и adjacency list.
А именно:
1. Не подгружаются все сохраненные данные из БД, только верхний уровень показывается (над этим сейчас работать буду, предположение что не подгружаются из-за того, что дерево подгружается ajax-ом).
2. Нет множественного выбора в плане когда открывается ветка дерева и из неё нужно выбрать всё (без нажатий 20 раз на все узлы, а нажимается на один верхний и все остальные 19 узлов выбираются автоматически). У картика такое реализовано тут демо
-
- Сообщения: 910
- Зарегистрирован: 2019.08.13, 01:49
Re: Построение дерева
И? Что мешает сбилдить nested sets и прицепить это поведение?
Вот вам даже на чистом SQL ребилд таблицы с ajacency list на nested sets https://habr.com/ru/post/153861/