Задать вопрос
@drboboev

Как вывести на экран дерево Nested Set с группировкой узлов?

Добрый день, знатоки.

После долгого поиска решения своей задачи начал понемногу вникать в Nested Set. Модель мне понравилась, очень удобно делать выборку данных. НО столкнулся с проблемой. Хотя, возможно, это не проблема, но я почему-то не могу понять как это реализовать.

Имею в базе данных некое дерево, к примеру меню сайта. Одним запросом вида:
SELECT * FROM my_tree ORDER BY left_key
получаю всё дерево.

Но я хочу построить меню сайта так, чтобы категории и подкатегории можно было сворачивать.

Т.е. меню сайта выглядит примерно вот так:
<ul>
  <li>Категория 1
    <ul>
      <li>Пункт меню 1.1</li>
      <li>Пункт меню 1.2</li>
    </ul>
  </li>
  <li>Категория 2
    <ul>
      <li>Пункт меню 2.1</li>
      <li>Пункт меню 2.2</li>
    </ul>
  </li>
</ul>


Подскажите пожалуйста, как мне, не нагружая базу лишними запросами и не нагромождая код кучей циклов, построить меню такого вида.

Спасибо
  • Вопрос задан
  • 536 просмотров
Подписаться 1 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Skillbox
    Веб-разработчик на PHP
    9 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Решения вопроса 1
@Arik
Обход дерева без рекурсии, а так просто рекурсией обходите записи и собираете дерево.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Kain_Wesker
Как вывести меню без циклов я не знаю, но для того, чтобы категории и подкатегории можно было сворачивать, могу посоветовать интересные модули:
https://github.com/dbushell/Nestable - он довольно простой и обеспечивает свёртывание.
https://github.com/RamonSmit/Nestable2 - доработка верхнего модуля с улучшеной возможностью ставить события.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
IT ATLAS Москва
от 250 000 до 500 000 ₽