Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: dynamiczne menu w php
Forum PHP.pl > Forum > Gotowe rozwiązania > Skrypty obsługi baz danych
mpps
cześć,
próbuję wykonać proste, dynamiczne menu oparte na bazie danych i mam problem...

najpierw kod:
  1. <?
  2. // menu glowne
  3. $sql_query = (&#092;"SELECT * FROM menul ORDER BY menul_nr ASC\");
  4. $row_countl = mysql_query($sql_query);
  5.  
  6. while ($linel = mysql_fetch_row($row_countl)){
  7. echo('<TR><TD><A HREF=\"index.php?id='.$linel[0].'\">'.$linel[1].' -</A></TD></TR>');
  8.  
  9. if($linel[0]==$_GET['id']){
  10. if($linel[0]==2){
  11. echo $bufor_menul_subcat;
  12. }
  13. $podstr=$linel[2];
  14. }
  15.  
  16. // submenu - poziom 1
  17. $sql_query = &#092;"SELECT * FROM menul_subcat ORDER BY menul_subcat_nr ASC\";
  18. $row_countl_subcat = mysql_query($sql_query);
  19.  
  20. $bufor_menul_subcat='';
  21. while ($linel_subcat = mysql_fetch_row($row_countl_subcat)){
  22. $bufor_menul_subcat.='<TR><TD><TABLE><TR><TD><A HREF=\"index.php?id=2&idsubcat='.$linel_subcat[0].'\">'.$linel_subcat[1].' -</A></TD><TD>&nbsp;<&nbsp;</TD></TR></TABLE></TD></TR>';
  23.  
  24. if($linel_subcat[0]==$_GET['idsubcat']){
  25. if($linel[0]==&& $linel_subcat[0]==201){
  26. echo $bufor_menul_sub;
  27. }
  28. $podstr=$linel_subcat[2];
  29. }
  30. // end submenu - poziom 1
  31.  
  32. // submenu - poziom 2
  33. $sql_query = &#092;"SELECT * FROM menul_sub WHERE menul_sub_cat='www' ORDER BY menul_sub_nr ASC\";
  34. $row_countl_sub = mysql_query($sql_query);
  35.  
  36. $bufor_menul_sub='';
  37. while ($linel_sub = mysql_fetch_row($row_countl_sub)){
  38. $bufor_menul_sub.='<TR><TD><TABLE><TR><TD><A HREF=\"index.php?id=2&idsubcat=201&idsub='.$linel_sub[0].'\">'.$linel_sub[2].' -</A></TD><TD>&nbsp;<<&nbsp;</TD></TR></TABLE></TD></TR>';
  39.  
  40. if($linel_sub[0]==$_GET['idsub']) $podstr=$linel_sub[3];
  41. }
  42. // end submenu - poziom 2
  43. }
  44. }
  45. ?>

Problem jest taki, że menu rozwija się w sposób następujący:
- menu 1
- menu 2 (po kliknięciu rozwija się podmenu i równocześnie wyświetla strona z bazy)
>- menu 2.1 (po kliknięciu rozwija się podmenu i równocześnie wyświetla strona z bazy)
>- menu 2.2
>- menu 2.3
>>- menu 2.1.1
>>- menu 2.1.2
>>- menu 2.1.3
- menu 3
itd.

a powinno:

- menu 1
- menu 2 (po kliknięciu rozwija się podmenu i równocześnie wyświetla strona z bazy)
>- menu 2.1 (po kliknięciu rozwija się podmenu i równocześnie wyświetla strona z bazy)
>>- menu 2.1.1
>>- menu 2.1.2
>>- menu 2.1.3
>- menu 2.2
>- menu 2.3
- menu 3
itd.

Nie chcę rozwiązywać tego przy pomocy js + php mimo, że każde rozwinięcie menu będzie powodowało przeładowanie strony.

Mam wrażenie, że tego typu menu jest na stronie php.pl (ale to może być tylko wrażenie biggrin.gif )

Może ma ktoś pomysł?
Z góry dzięki za każdy!

pzdr
marcin
tiraeth
Napisz rekurenkcyjnie smile.gif
mpps
W którym momencie? biggrin.gif
heee
tak serio, to nie stosowałem rekurencji do tej pory, i nie wiem, czy sobie poradzę...
Jest dość dużo informacji na temat rekurencji, że spowalnia działanie kodu.
Czy zastosowanie jej jako rozwiązania do skonstruowania drzewiastego menu nie spowoduje nadmiernego (niepotrzebnego) obciążenia serwera?
Może istnieje jakieś inne rozwiązanie (np. z pominięciem rekurencji rolleyes.gif )

Wracając do kodu, który napisałem:
Dziwne jest to, że submenu poziomu pierwszego otwiera (ukazuje) się we właściwym miejscu - pod odpowiednim linkiem głównego menu - tylko submenu poziomu 2 otwiera się po skończeniu pętli:
  1. <?php
  2. while ($linel_subcat = mysql_fetch_row($row_countl_subcat))
  3. $bufor_menul_subcat.='<TR><TD><TABLE><TR><TD><A HREF=\"index.php?id=2&idsubcat='.$linel_subcat[0].'\">'.$linel_subcat[1].' -</A></TD><TD>&nbsp;<&nbsp;</TD></TR></TABLE></TD></TR>';
  4. ?>

czyli po wyświetleniu całego wyniku zapytania do bazy (submenu poziomu 1), czyli jakby po spełnieniu pierwszego warunku:
  1. <?php
  2. if($linel[0]==2 //...
  3. ?>

Jeśli z kodu:
  1. <?php
  2. if($linel[0]==&& $linel_subcat[0]==201)
  3. ?>

usunę pierwszą część, to wynik (wyświetlenie całego submenu poziomu 2) zostaje powtórzony po każdym linku menu głównego (oprócz pierwszego - podmenu dotyczy linku nr 2 z menu - tak dla informacji).
Może powinienem to inaczej zagnieździć? Próbowałem już na kilka sposobów, ale wynik nigdy nie był taki, jaki być powinien...

Poradźcie coś, bo mi się już pomysły skończyły...

p.s.
@Tiraeth
dzięki za pomysł - jeśli znajdziesz chwilę, żeby rozwinąć myśl, będę wdzięczny!
Lamassu
Może jestem zacofany ale czy nie poprawniej byłoby tak:
Kod
<?php
if(($linel[0]==2) && ($linel_subcat[0]==201))
?>
mpps
czemu chciałbyś zastosować dodatkowe nawiasy?
jakie mają one znaczenie?
pytam z ciekawości, bo w samym działaniu kodu one nic, niestety, nie zmieniają...
myślę, że to wynika z samego zagnieżdżenia funkcji if{} przy $linel_subcat i $linel_sub... (jestem w błędzie?)

pzdr
m
Lamassu
:oops: :oops: Sory. Popierdzielilo mi sie z JavaScript;
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.