Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wielopoziomowe menu
Forum PHP.pl > Forum > PHP
peja1990
Witam,
proszę Was o pomoc przy napisaniu kodu PHP, generującego menu wielopoziomowe zapisane w bazie danych mySQL.

Struktura tabeli mySQL:
  1. pageID object dir name menu superior position status
  2.  
  3. 1 system mail Korespondencja 1 NULL 01 1
  4. 2 system chat Czat z klientem 1 1 01 1
  5. 3 system messages Wiadomości 1 1 02 1
  6. 4 system mailing System mailingowy 1 1 03 1
  7. 5 system messages Wiadomości mailingowe 1 4 01 1
  8. 6 system emails Baza adresów mailingowych 1 4 02 1
  9. 7 system groups Grupy mailingowe 1 4 03 1
  10. 8 system notifications Powiadomienia 1 NULL 02 1
  11. 9 system orders Zamówienia 1 NULL 03 1
  12. 10 system servers Serwery 1 NULL 04 1
  13. 11 system files Pliki 1 NULL 05 1
  14. 12 system base Baza plików 1 11 01 1
  15. 13 system manager Menadżer plików 1 11 02 1
  16. 14 system download Dział download 1 11 03 1
  17. 15 system pages Podstrony 1 NULL 06 1
  18. 16 system service Strony serwisu 1 15 01 1
  19. 17 system static Strony statyczne 1 15 02 1
  20. 18 system add Dodaj stronę statyczną 1 17 01 1
  21. 19 system system System 1 NULL 07 1
  22. 20 system reports Raporty 1 19 01 1
  23. 21 system backups Backupy 1 19 02 1
  24. 22 system stats Statystyki 1 19 03 1
  25. 23 system profile Mój profil 1 19 04 1
  26. 24 system users Użytkownicy 1 19 05 1
  27. 25 system admins Administracja 1 19 06 1
  28. 26 system visitors Goście 1 19 07 1
  29. 27 system modules Moduły 1 19 08 1
  30. 28 system config Konfiguracja 1 19 09 1


Tak powinno wyglądać wygenerowane drzewo:
  1. Korespondencja
  2. Czat z klientem
  3. Wiadomości
  4. System mailingowy
  5. Wiadomości mailingowe
  6. Baza adresów mailingowych
  7. Grupy mailingowe
  8. Powiadomienia
  9. Zamówienia
  10. Serwery
  11. Pliki
  12. Baza plików
  13. Menadżer plików
  14. Dział download
  15. Podstrony
  16. Strony serwisu
  17. Strony statyczne
  18. Dodaj stronę statyczną
  19. System
  20. Raporty
  21. Backupy
  22. Statystyki
  23. Mój profil
  24. Użytkownicy
  25. Administracja
  26. Goście
  27. Moduły
  28. Konfiguracja


Aktualny kod PHP:
  1. $list_menu = null;
  2. $query = safe_query("SELECT * FROM `".PREFIX."pages` WHERE status='1' AND object='system' ORDER BY position ASC");
  3. while($dx = mysql_fetch_array($query)) {
  4. $count = mysql_fetch_array(safe_query("SELECT count(pageID) as max FROM `".PREFIX."pages` WHERE status='1' AND object='system' AND superior='".$dx['pageID']."'"));
  5. if($count['max'] > 0) {
  6. $list_menu .= '<li>'.$dx['name'].'<ul>';
  7. $query2 = safe_query("SELECT * FROM `".PREFIX."pages` WHERE status='1' AND object='system' AND superior='".$dx['pageID']."' ORDER BY position ASC");
  8. while($dx2 = mysql_fetch_array($query2)) {
  9. $list_menu .= '<li>'.$dx2['name'].'</li>';
  10. }
  11. $list_menu .= '</ul></li>';
  12. } elseif($dx['superior'] == null || empty($dx['superior'])) {
  13. $list_menu .= '<li>'.$dx['name'].'</li>';
  14. }
  15. }


Aktualny kod nie generuje mi drzewo tylko do takiej postaci:
  1. Korespondencja
  2. Czat z klientem
  3. Wiadomości
  4. System mailingowy
  5. Powiadomienia
  6. Zamówienia
  7. Serwery
  8. Pliki
  9. Baza plików
  10. Menadżer plików
  11. Dział download
  12. Podstrony
  13. Strony serwisu
  14. Strony statyczne
  15. System
  16. Raporty
  17. Backupy
  18. Statystyki
  19. Mój profil
  20. Użytkownicy
  21. Administracja
  22. Goście
  23. Moduły
  24. Konfiguracja

więc jak widać są tylko dwa poziomy.

Dodam, że w komórce "superior" zdefiniowałem ID nadrzędnego rekordu.

Czy ma ktoś z Was jakieś pomysły ?

Za wszelką pomoc będę bardzo wdzięczny,
Serdecznie pozdrawiam.


---------
JUŻ SOBIE PORADZIŁEM smile.gif
Można usunąć temat...
maniana
Ogólnie to można do tegu użyć rekurencji, przykład pisany z palca:
  1. function GenMenu($superiorID) {
  2. $query = safe_query("SELECT * FROM `".PREFIX."pages` WHERE status='1' AND superior='".$superiorID."' AND object='system' ORDER BY position ASC");
  3. if(mysql_num_fields($query)>0) {
  4. echo '<ul>';
  5. while($dx = mysql_fetch_array($query)) {
  6. echo '<li>'.$dx['name'].GenMenu($dx['superior']).'</li>';
  7. }
  8. echo '</ul>';
  9. }
  10. return $wyn;
  11. }
  12.  
  13. GenMenu(null);
vokiel
Rekurencja jak najbardziej, moim zdaniem wystarczy jedno zapytanie na początku.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.