Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> dynamiczne menu w php
mpps
post 17.04.2005, 17:24:01
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 biggrin.gif )

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

pzdr
marcin


--------------------
www.mpps.pl
park maszynowy: apache 2.2.22 | php 5.4.0 | MySQL 5.0.10 | phpMyAdmin 3.5.0 | notepad ++ | pilsner urquell
Go to the top of the page
+Quote Post
tiraeth
post 17.04.2005, 17:29:41
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 smile.gif
Go to the top of the page
+Quote Post
mpps
post 17.04.2005, 20:45:37
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? 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!


--------------------
www.mpps.pl
park maszynowy: apache 2.2.22 | php 5.4.0 | MySQL 5.0.10 | phpMyAdmin 3.5.0 | notepad ++ | pilsner urquell
Go to the top of the page
+Quote Post
Lamassu
post 22.04.2005, 16:35:29
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))
?>


--------------------
Debian 2.4.20-bf2.4-xfs | Apache 1.3.33 | php 5.0.4 | mysql 4.1.6-gamma | php Designer 2005 v3.0.6
Go to the top of the page
+Quote Post
mpps
post 23.04.2005, 06:36:59
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


--------------------
www.mpps.pl
park maszynowy: apache 2.2.22 | php 5.4.0 | MySQL 5.0.10 | phpMyAdmin 3.5.0 | notepad ++ | pilsner urquell
Go to the top of the page
+Quote Post
Lamassu
post 24.04.2005, 13:49:42
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;


--------------------
Debian 2.4.20-bf2.4-xfs | Apache 1.3.33 | php 5.0.4 | mysql 4.1.6-gamma | php Designer 2005 v3.0.6
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 4.05.2025 - 05:56