| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Общие вопросы > меню |
| Автор: akil 17.12.2008, 16:31 | ||
| Привет. Есть таблица в БД MySQL
надо что бы получилась вот такая вложеность: - Страница 1 - Под страница 1_1 - Под страница 1_2 - Под под страница 1_2_1 - Под под страница 1_2_2 - Под страница 1_3 - Страница 2 - Страница 3 - Под страница 3_1 - Под под страница 3_1_1 не могу догнать как сделать... |
| Автор: godvinn 17.12.2008, 16:51 |
| тебе просто надо реализовать обход дерева - почитай вот это http://forum.vingrad.ru/forum/topic-206748.html |
| Автор: akil 18.12.2008, 16:03 |
| *SORRY* не получается |
| Автор: krundetz 18.12.2008, 16:28 |
| akil, у тебя есть указатель на перент его и используй береш извлекаеш все что с перентом 0, побежал по ним в цикле, но прежде чем переходить к следующиму элементу, проверяешь нет ли у текушиго потомков, и т.д. Все это называется рекурсивный обход дерева. |
| Автор: akil 18.12.2008, 18:48 |
| что-то знаний не хватает((( |
| Автор: krundetz 18.12.2008, 19:20 |
| akil, ну вот смотри, допустим у меня есть такая таблица с меню id | name | parentId 1 | Первый | 0 2 | Второй | 1 3 | Третий | 0 ..... Тоесть у нас есть уникальный идентификатор, название и родитель пункта меню. Создаем функцию которая рисует дерево drawTree($parentId) в качестве параметра в нее передаем идетентификатор родителя. В самом начале передаем туда ноль. Что делает эта функция? Она извлекает из БД данные, а именно всю информацию про пункты у которых parentId = $parentId передоному в функцию, далее определяем вернул ли нам запрос к БД информацию о пунтах у которых родитель соответсвует номеру переданому в функцию. Если информация получина то мы опепрделяем количество информации(сколько пунктов меню в таблице из перввои), после чего прогоняем результат запроса через цикл. В цикле мы печатаем Пункты по очереди и за одно на каждом шаге запускаем функцию drawTree() только уже в качестве параметра передаем туда не 0 а идентификатор только что выведеного на экран пункта. Вот и весь алгоритм. Желаю удачи в реализации. |