Многоуровневое меню

nocturne

квантовая нелокальность
Хочу сделать многоуровневое меню и возник вопрос реализации.

Меню выглядит так:

PHP:
<ul id="jsddm">
    <li><a href="#">JavaScript</a>
        <ul>
            <li><a href="#">Drop Down Menu</a></li>
            <li><a href="#">jQuery Plugin</a></li>
            <li><a href="#">Ajax Navigation</a></li>
        </ul>
    </li>
    <li><a href="#">Effect</a>
        <ul>
            <li><a href="#">Slide Effect</a></li>
            <li><a href="#">Fade Effect</a></li>
            <li><a href="#">Opacity Mode</a></li>
            <li><a href="#">Drop Shadow</a></li>
            <li><a href="#">Semitransparent</a></li>
        </ul>
    </li>
    <li><a href="#">Navigation</a></li>
    <li><a href="#">HTML/CSS</a></li>
    <li><a href="#">Help</a></li>
</ul>
В базе есть два значения $level 1 и 2
Значение 1 - это заголовок меню
Значение 2 - это подменю

Пишу перед циклом
PHP:
echo '<ul id="jsddm">';
Далее цикл mysql.

потом конструкция

PHP:
 if($level == 1) {
    <li><a href="из базы линк">из базы титле</a>
}
PHP:
if($level == 2) {
        <ul>
            <li><a href="из базы линк">из базы титле</a></li>
        </ul>
}
конец цикла mysql

PHP:
echo '</ul>';
Это заведомо неверно, нет закрывающего тега </li> в первом выражении и во втором выражении должно быть написано только:
PHP:
<li><a href="из базы линк">из базы титле</a></li>
Как можно реализовать такое меню?
 

nocturne

квантовая нелокальность
Alien85
Если я их поставлю, вывод меню будет неверным.
 

Linker

Новичок
Во-первых, значений "level" (1 и 2) не достаточно для реализации такого меню, т.к. к примеру подменю "Drop Down Menu" и "Slide Effect" будут иметь одинаковое значение 2, но к какому именно меню они относятся ("JavaScript" или "Effect") не понятно.

Во-вторых, вложенность такого меню, также ограничена 1 уровнем.

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

nocturne

квантовая нелокальность
Где бы посмотреть пример как его реализовать? Структуру БД, примерный код, что бы ясно было в какую сторону двигаться.
 

Linker

Новичок
1. Древовидная структура хранения данных или "Деревья"
2. Рекурсивный внешний ключ на ту же самую таблицу, т.е. дополнительное поле, которое может быть NULL, а может быть внешним ключом на первичный ключ другой записи, в нашем случае "родителя".
 

KorP

Новичок
Вообще если открыть поиск - стопицот примеров :)
Я лично юзаю id и parent_id, а потом уже из массива строю как раз такую менюшку, быстро и просто.
 

Ruslan

Новичок
Все верно.
Не хватает только индекса порядка. Есть level и есть order. Каждое текущее повышение значения level вложенность в предшествующую запись и наоборот. Данный подход экономит ресурсы при выводе дерева, но значительно затрудняет его редактирование. Лучше всего индекс сортировки присваивать с шагом больше 1, чтобы при перестроении быстро заполнять пустые слоты.
 
Сверху