Forum Webscript.Ru

Программирование => Perl => Тема начата: Inecs от 15 Сентября 2005, 17:48:09

Название: Многоуровневое меню
Отправлено: Inecs от 15 Сентября 2005, 17:48:09
Народ, тут возник один вопросец, как можно организовать многоуровневое меню с неограниченным вложением? Интересует алогритм действий
Название: Многоуровневое меню
Отправлено: Inecs от 15 Сентября 2005, 18:02:25
Всё понял. Решение нашлось само сабой. Всем спасибо.
Название: Многоуровневое меню
Отправлено: Ivan Kolesnikov от 16 Сентября 2005, 11:08:02
Если задал вопрос, то ответь не него, хоть и нашел ответ сам. Другим ведь тоже интересно :)
Название: Многоуровневое меню
Отправлено: Inecs от 16 Сентября 2005, 11:28:09
id   parent_id         title
####   ##########   ###########
1         Компьютеры
2         Оргтехника
3         Мобильники
4   1      Персоналки
5   1      КПК
6   5      Rover
7   5      HP
8   5      Dell
9   7      Серия 1
10   7      Серия 2
11   7      Серия 3
12   9      Черныё
13   9      Белые
14   9      Зелёные
15   9      В крапинку

Вообщем структура базы такова.

Изначально скрипт выдаёт главные рубрики, где parent_id либо равно нулю, либо пустое.
К рубрике прикрепляется параметр вида скрипт.pl?id=id Рубрика является ссылкой по нажатии на которую передаётся параметр id и из базы “достаются” потомки. Скажем при нажатии на “Компьютеры” вылетит меню с “Персоналки” и “КПК”. И так далее.
Название: Многоуровневое меню
Отправлено: Ivan Kolesnikov от 16 Сентября 2005, 11:45:15
Да так все просто, но вот чтобы построить такое дерево, нужно выполнить кучу запросов. Если не брать в расчет что по такой структуре, скажем oracle строит дерево автоматически, но я думаю, что тоже используется куча запросов, только на сервере.

Можно конечно получить все данные и обработать скриптом, но все равно при большом количестве - это долго.

Гораздо быстрее в плане вывода результата можно сделать используя Nested Set (http://www.webscript.ru/stories/04/09/01/8197045). Да придется повозиться с добавлением, удалением и темболее с перемещением, зато выборка будет идти намного быстрее, чем в твоем варианте.

Извиняюсь, не дочитал до конца, если не надо выводить все дерево одновременно, то твой вариант будет более оптимальным.
Название: Многоуровневое меню
Отправлено: Nudlok от 16 Сентября 2005, 15:19:35
я думаю легче это сделать на яве используя CSS свойство hidden
так можно спрятять большое дерево =)
Название: Многоуровневое меню
Отправлено: glebushka от 16 Сентября 2005, 21:15:09
Nudlok, гениально.