RecentForce99
@RecentForce99

Как выгрузить список разделов неограниченной вложенности из бд?

Есть такая таблица, где поле, которое имеет пустой parent_id является корневым. Поля, которые имеют parent_id = id.родительского раздела попадают в в этот родительский раздел и вложенность может быть бесконечной. Нужно выводить разделы как на 2 скриншоте (взял с яндекс почты).

Не понимаю даже за что браться, поэтому и решил обратиться за помощью, заранее спасибо!

616ac53504a90439990192.png
Необходимо вывести данные как здесь:
616ac54873c21348508268.png
  • Вопрос задан
  • 72 просмотра
Решения вопроса 1
RecentForce99
@RecentForce99 Автор вопроса
function ShowTree($ParentID, $lvl) {

    global $link;
    global $lvl;
    $lvl++;

    $sSQL="SELECT * FROM chapters WHERE parent_id = '$ParentID' ";
    $result = $link->query($sSQL);

    if (mysqli_num_rows($result) > 0) {
        echo("<ul class='parent_ul'>\n");
        while ( $row = mysqli_fetch_array($result) ) {
            $ID1 = $row["id"];
            echo("<li class='parent_li'>\n");
            echo("<a href=\""."?ID=".$ID1."\">".$row["name"]."</a>"."  \n");


            ShowTree($ID1, $lvl);
            $lvl--;

        }

        echo("</ul>\n");
    }

}
ShowTree(0, 0);
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@rPman
Классический алгоритм обхода дерева по линейному списку - рекурсивный.
твой метод должен искать элементы в списке, у которых parent_id указанный в параметрах вызова, возвращает метод html код отрисовки найденных элементов (кстати что возвращать так же зависит от того, как именно ты собираешься рисовать дерево, есть два подхода, рекурсивный и линейный с отступами)

Первый вызов метода должен быть с пустым parent_id, он найдет и выведет корневой список, затем (или в процессе, зависит от способа рисования дерева) в цикле этот метод должен для каждого элемента вызывать этот же метод но с указанием в качестве parent_id текущий элемент.

Если нужно сгенерровать дерево без не раскрытых ветвей, то где то надо хранить какая ветвь выбрана (раскрыта) и пропускать генерацию вывода для не раскрытых.

Часто генерируют все дерево но для не раскрытых веток указывают стиль - display:none, меняя его при перемещении пользователя по дереву.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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