Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> меню 
:(
    Опции темы
akil
Дата 17.12.2008, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 29.5.2008

Репутация: нет
Всего: нет



Привет.

Есть таблица в БД MySQL
Код

CREATE TABLE `_menu` (
  `id` int(11) NOT NULL auto_increment,
  `name_rus` varchar(256) NOT NULL,
  `parent` int(11) NOT NULL default '0',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=10 DEFAULT CHARSET=cp1251 AUTO_INCREMENT=10 ;

INSERT INTO `_menu` VALUES (1, 'Страница 1', 0);
INSERT INTO `_menu` VALUES (2, 'Страница 2', 0);
INSERT INTO `_menu` VALUES (3, 'Страница 3, 0);
INSERT INTO `_menu` VALUES (4, 'Под страница 1_1, 1);
INSERT INTO `_menu` VALUES (5, 'Под страница 1_2, 1);
INSERT INTO `_menu` VALUES (6, 'Под страница 1_3, 1);
INSERT INTO `_menu` VALUES (7, 'Под под страница 1_2_1, 5);
INSERT INTO `_menu` VALUES (8, 'Под под страница 1_2_2, 5);
INSERT INTO `_menu` VALUES (9, 'Под страница 3_1, 3);
INSERT INTO `_menu` VALUES (10, 'Под под страница 3_1_1, 9);


надо что бы получилась вот такая вложеность:
- Страница 1
   - Под страница 1_1
   - Под страница 1_2
     - Под под страница 1_2_1
     - Под под страница 1_2_2
   - Под страница 1_3
- Страница 2
- Страница 3
   - Под страница 3_1
     - Под под страница 3_1_1


не могу догнать как сделать...
 smile 
PM MAIL   Вверх
godvinn
Дата 17.12.2008, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 407
Регистрация: 4.4.2008
Где: possibility of mo ving to Kyiv

Репутация: 1
Всего: 1



тебе просто надо реализовать обход дерева 

- почитай вот это http://forum.vingrad.ru/forum/topic-206748.html 



--------------------
Everything happens in life.
user posted image
PM MAIL   Вверх
akil
Дата 18.12.2008, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 29.5.2008

Репутация: нет
Всего: нет



*SORRY*

не получается
 smile 
PM MAIL   Вверх
krundetz
Дата 18.12.2008, 16:28 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вечный странник
***


Профиль
Группа: Завсегдатай
Сообщений: 1400
Регистрация: 14.6.2007
Где: НН(Сормово)

Репутация: 20
Всего: 69



akil, у тебя есть указатель на перент его и используй

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


--------------------
!цензоры - Хранитель стратегической жидкости
Группа ТГВ
Группа Нижний Новгород
user posted image
PM MAIL   Вверх
akil
Дата 18.12.2008, 18:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 29.5.2008

Репутация: нет
Всего: нет



что-то знаний не хватает(((
PM MAIL   Вверх
krundetz
Дата 18.12.2008, 19:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вечный странник
***


Профиль
Группа: Завсегдатай
Сообщений: 1400
Регистрация: 14.6.2007
Где: НН(Сормово)

Репутация: 20
Всего: 69



akil, ну вот смотри, допустим у меня есть такая таблица с меню

id | name | parentId
1 | Первый | 0
2 | Второй | 1
3 | Третий | 0
.....

Тоесть у нас есть уникальный идентификатор, название и родитель пункта меню.
Создаем функцию которая рисует дерево drawTree($parentId) в качестве параметра в нее передаем идетентификатор родителя. В самом начале передаем туда ноль. Что делает эта функция? Она извлекает из БД данные, а именно всю информацию про пункты у которых parentId = $parentId передоному в функцию, далее определяем вернул ли нам запрос к БД информацию о пунтах у которых родитель соответсвует номеру переданому в функцию. Если информация получина то мы опепрделяем количество информации(сколько пунктов меню в таблице из перввои), после чего прогоняем результат запроса через цикл. В цикле мы печатаем Пункты по очереди и за одно на каждом шаге запускаем функцию drawTree() только уже в качестве параметра передаем туда не 0 а идентификатор только что выведеного на экран пункта. Вот и весь алгоритм. Желаю удачи в реализации.


--------------------
!цензоры - Хранитель стратегической жидкости
Группа ТГВ
Группа Нижний Новгород
user posted image
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0443 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.