Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> dynamiczne menu w php
mpps
post
Post #1





Grupa: Zarejestrowani
Postów: 242
Pomógł: 0
Dołączył: 14.03.2003
Skąd: Szczecin

Ostrzeżenie: (0%)
-----


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 (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) )

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

pzdr
marcin
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
tiraeth
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 1 789
Pomógł: 41
Dołączył: 30.10.2003
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Napisz rekurenkcyjnie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
mpps
post
Post #3





Grupa: Zarejestrowani
Postów: 242
Pomógł: 0
Dołączył: 14.03.2003
Skąd: Szczecin

Ostrzeżenie: (0%)
-----


W którym momencie? (IMG:http://forum.php.pl/style_emoticons/default/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 (IMG:http://forum.php.pl/style_emoticons/default/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!
Go to the top of the page
+Quote Post
Lamassu
post
Post #4





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 17.04.2004

Ostrzeżenie: (0%)
-----


Może jestem zacofany ale czy nie poprawniej byłoby tak:
Kod
<?php
if(($linel[0]==2) && ($linel_subcat[0]==201))
?>
Go to the top of the page
+Quote Post
mpps
post
Post #5





Grupa: Zarejestrowani
Postów: 242
Pomógł: 0
Dołączył: 14.03.2003
Skąd: Szczecin

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
Lamassu
post
Post #6





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 17.04.2004

Ostrzeżenie: (0%)
-----


:oops: :oops: Sory. Popierdzielilo mi sie z JavaScript;
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.12.2025 - 12:08