Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Многоуровневое меню

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
sabriel
Отправлено: 11 Мая, 2012 - 09:34:44
Post Id


Гость


Покинул форум
Сообщений всего: 77
Дата рег-ции: Июнь 2008  
Откуда: Салават, Башкортостан


Помог: 0 раз(а)




Здравствуйте. Помогите организовать вывод многоуровнего меню.

Создал таблицу.
id, name, link, parent_id

в parent_id будет записываться id родителя.

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

А пользоваться левым и правым смещение не хочется (слишком муторно по-моему).

С нетерпением жду ответовУлыбка
 
 Top
avtor.fox
Отправлено: 11 Мая, 2012 - 09:43:55
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2083
Дата рег-ции: Март 2012  
Откуда: Воронеж


Помог: 50 раз(а)




К примеру создать ещё одну табличку, в которой будет вот такая структура -

mid - id родителя.
id - id вложенного пункта.
text - название пункта.
link - ссылка пункта.

И связать их так -

В головной таблице к примеру есть запись -
id - 0
text - 'test'
link - 'href'

Подтягиваем дочерние пункты родителя с id = 0 из второй таблички. Сами сможете же составить запросы и наполнение? Улыбка
 
 Top
sabriel
Отправлено: 11 Мая, 2012 - 09:50:16
Post Id


Гость


Покинул форум
Сообщений всего: 77
Дата рег-ции: Июнь 2008  
Откуда: Салават, Башкортостан


Помог: 0 раз(а)




а если у дочерних элементов будут свои дочерние?
да и в админке потом такие пункты будет править неудобно я думаю. или ошибаюсь?
 
 Top
Мелкий Супермодератор
Отправлено: 11 Мая, 2012 - 10:04:17
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




sabriel пишет:
А пользоваться левым и правым смещение не хочется (слишком муторно по-моему).

Nested Sets?
Если меню редкоизменяемое - то как раз очень хороший вариант.

По вашей структуре (не помню каноничное название) - выбираете всю таблицу, перестраиваете в массив[parent_id][]=элемент и рекурсивно выводите.


-----
PostgreSQL DBA
 
 Top
sabriel
Отправлено: 11 Мая, 2012 - 10:17:06
Post Id


Гость


Покинул форум
Сообщений всего: 77
Дата рег-ции: Июнь 2008  
Откуда: Салават, Башкортостан


Помог: 0 раз(а)




С рекурсиями пока не сталкивался, может быть (если не сложно) разовьете свою мысль в скелет решения) или в готовый пример (если уж совсем не сложно)
 
 Top
vitaliy_mad
Отправлено: 11 Мая, 2012 - 10:27:22
Post Id


Участник


Покинул форум
Сообщений всего: 1107
Дата рег-ции: Окт. 2008  
Откуда: Украина, Мариуполь


Помог: 0 раз(а)




sabriel, такие вещи решаются с помощью рекуурсивных фонкций. почитайте здесь: http://php.su/functions/custom/?3. Если не разберетесь будем дальше помагать...
 
 Top
sabriel
Отправлено: 11 Мая, 2012 - 10:28:39
Post Id


Гость


Покинул форум
Сообщений всего: 77
Дата рег-ции: Июнь 2008  
Откуда: Салават, Башкортостан


Помог: 0 раз(а)




спасибо. начну читать)
 
 Top
EuGen Администратор
Отправлено: 11 Мая, 2012 - 10:32:47
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)






-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
sabriel
Отправлено: 11 Мая, 2012 - 11:01:19
Post Id


Гость


Покинул форум
Сообщений всего: 77
Дата рег-ции: Июнь 2008  
Откуда: Салават, Башкортостан


Помог: 0 раз(а)




http://www.php.su/articles/?cat=...les&page=019
нашел вот это. пытаюсь прикруть.

EuGen
посмотрю сейчас ссылки Улыбка
(Добавление)
сделал по вот этому
CODE (htmlphp):
скопировать код в буфер обмена
  1. http://www.php.su/articles/?cat=examples&page=019


CODE (htmlphp):
скопировать код в буфер обмена
  1. function showmenu($uid,$gr){
  2.     $sql = "SELECT * FROM menu WHERE parent=$uid and gr=$gr order by pos";
  3.     $a = mysql_query($sql);
  4.     $menu.= "<ul>\n";
  5.     while($x = mysql_fetch_assoc($a)) {
  6.         $menu.= "<li>" .$x['title']."</li>\n";
  7.         $menu.= showmenu($x["idmenu"],$gr);
  8.     }
  9.     $menu.="</ul>\n";
  10.     return $menu;
  11.    
  12. }


как с массивом сделать так и не придумал (что б одним запросом) может кто подскажет? массив такой получился
CODE (htmlphp):
скопировать код в буфер обмена
  1. (
  2.     [0] => Array
  3.         (
  4.             [idmenu] => 1
  5.             [title] => Главная
  6.             [parent] => 0
  7.         )
  8.  
  9.     [1] => Array
  10.         (
  11.             [idmenu] => 3
  12.             [title] => Основное
  13.             [parent] => 2
  14.         )
  15.  
  16.     [2] => Array
  17.         (
  18.             [idmenu] => 2
  19.             [title] => О нас
  20.             [parent] => 0
  21.         )
  22.  
  23.     [3] => Array
  24.         (
  25.             [idmenu] => 4
  26.             [title] => Контакты
  27.             [parent] => 0
  28.         )
  29.  
  30.     [4] => Array
  31.         (
  32.             [idmenu] => 6
  33.             [title] => Чужие
  34.             [parent] => 4
  35.         )
  36.  
  37.     [5] => Array
  38.         (
  39.             [idmenu] => 7
  40.             [title] => Проверочные
  41.             [parent] => 6
  42.         )
  43.  
  44.     [6] => Array
  45.         (
  46.             [idmenu] => 8
  47.             [title] => тест3
  48.             [parent] => 1
  49.         )
  50.  
  51.     [7] => Array
  52.         (
  53.             [idmenu] => 5
  54.             [title] => Наши
  55.             [parent] => 1
  56.         )
  57.  
  58. )
 
 Top
DelphinPRO
Отправлено: 11 Мая, 2012 - 18:01:59
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)






-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Хранение данных, их вывод и обработка »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB