Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]Jak zrobić dynamiczne rozwijane menu w php i mysql
przemo191
post 27.10.2011, 18:45:38
Post #1





Grupa: Zarejestrowani
Postów: 154
Pomógł: 3
Dołączył: 1.08.2011

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


Witam. Chciałbym zrobić menu które pobiera dane z tabel mysql. Będzie tam sporo podkategorii, mniej więcej tak jak jest na stronie Tu.

Mam już zrobione wyświetlanie kategorii głównych tych na samym początku.
  1. $query = 'SELECT * FROM kategorie';
  2. $result = mysql_query($query);
  3. $num=mysql_numrows($result);
  4. $i=0;
  5.  
  6. while ($i < $num){
  7.  
  8. if($row = mysql_fetch_assoc($result)){
  9. $nazwa_kategori=$row['nazwa'];
  10. $sub_kategoria=$row['sub_kategoria'];
  11. echo '<li class="wpis"><a href="http://terazmeble.pl/strona/kategorie/sub_kategoria.php?kategoria='.$nazwa_kategori.'&n=1">'.$nazwa_kategori.'</a></li>';
  12. }
  13. $i++;
  14. }


I tu pojawia się problem, jak zrobić tak żeby po kliknięciu na daną kategorię wyświetlała się podkategoria(1) (pod tą główną), a po kliknięciu na podkategorię(1) wyświetlała się następna podkategoria(2) (pod podkategorią(1)).

Trochę to zawiłe, ale efekt o jaki mi chodzi podałem wcześniej w linku.

Nie wiem w ogóle jak się do tego zabrać. Znam html i podstawy php (ale to za mało)
Jak na razie mam wyświetlanie głównych kategorii z bazy danych, ale później nie wiem jak zrobić te podkategorie (i kolejne podkategorie).

Prosił bym o pomoc.
Jakieś wyjaśnienie tego jak ma to działać, albo jakiś poradnik wink.gif

Ten post edytował przemo191 27.10.2011, 18:59:47
Go to the top of the page
+Quote Post
iro88
post 27.10.2011, 20:47:15
Post #2





Grupa: Zarejestrowani
Postów: 47
Pomógł: 3
Dołączył: 13.10.2010
Skąd: Świdnica

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


Musisz napisać skrypt PHP który wyświetla menu w zależności od tego co dostaje z GET'a, czyli mówiąc prosto reagujący na to gdzie aktualnie znajdujemy się na stronie. Musisz również zmodyfikować bazę danych. Poniżej przykład jak bym to rozwiązał.

Przykład bazy:

id | pid | nazwa
------------------
1 | 0 | pierwsza strona
2 | 0 | druga strona
3 | 0 | trzecia strona
4 | 2 | podstrona drugiej strony
itd. itp. (mam nadzieję, że już łapiesz powoli o co może mi chodzić)

Przykład skryptu:

1. pobierasz GET'a z adresu np. www.twojastrona.pl/p=0
2. wyświetlasz strony których "pid" == 0
efekt: pierwsza strona, druga strona, trzecia strona

1. pobierasz GET'a z adresu np. www.twojastrona.pl/p=2
2. wyświetlasz strony których "pid" == 2
efekt: podstrona drugiej strony

Ten post edytował iro88 27.10.2011, 20:50:54
Go to the top of the page
+Quote Post
CuteOne
post 27.10.2011, 21:12:41
Post #3





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

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


To wcale nie jest takie proste jak się wydaje smile.gif takie menu musi być obsługiwane rekurencyjnie czyli od dziecka do rodzica w Twoim(iro88) przykładzie pobierasz maksymalnie drugi poziom kategorii.

Poszukaj na necie artykułów o budowie drzew kategorii - php tree category

Ze swojej strony mogę polecić metodę IP http://blog.mwojcik.pl/2008/02/17/drzewa-k...-php-metoda-ip/
Go to the top of the page
+Quote Post
iro88
post 27.10.2011, 21:39:28
Post #4





Grupa: Zarejestrowani
Postów: 47
Pomógł: 3
Dołączył: 13.10.2010
Skąd: Świdnica

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


Hmm... W takim razie zrobiłbym drugą tabelę z id rodzica i dziecka. Wtedy można się pozbyć z pierwszej tabeli "pid". Mając id rodzica i dziecka można zapętlić skrypt i wyświetlić całą drogę od dziadka do wnuka. Ograniczenie zagnieżdżenia przerwać warunkiem np. liczyć ilość pętli i przerwać w odpowiednim momencie.
Go to the top of the page
+Quote Post
przemo191
post 28.10.2011, 13:57:38
Post #5





Grupa: Zarejestrowani
Postów: 154
Pomógł: 3
Dołączył: 1.08.2011

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


Dzięki za podpowiedź, wiedziałem że to nie będzie proste.

Na początku myślałem podobnie jak iro88. Miałem podobny pomysł, ale coś mi w nim nie pasowało.
Natomiast pomysł CuteOne jest bardzo dobry, ale najpierw muszę go rozgryźć.

Nie spodziewałem się takiej "maniany".
Jeszcze raz dzięki za odpowiedź, i chęć podjęcia się, rozpracowania o co mi chodzi wink.gif
Go to the top of the page
+Quote Post
iro88
post 28.10.2011, 21:49:32
Post #6





Grupa: Zarejestrowani
Postów: 47
Pomógł: 3
Dołączył: 13.10.2010
Skąd: Świdnica

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


Przespałem się z tą myślą i doszedłem do wniosku, że mój pierwszy pomysł ma jednak sens, da się i wcale nie jest to takie zamieszane wink.gif Jak będę miał chwilkę czasu to w ramach edukacyjnych podrzucę przykład bazy i działającego kodu.

@przemo191 nie załamuj się i staw temu czoła (nie czekaj na mnie, bo mogę nie znaleźć czasu w ten weekend) im więcej będziesz od siebie samego wymagał i stawiał sobie wyzwania tym więcej będziesz umiał, a jak dostaniesz pod nos to g. się nauczysz wink.gif
Go to the top of the page
+Quote Post
przemo191
post 29.10.2011, 08:25:38
Post #7





Grupa: Zarejestrowani
Postów: 154
Pomógł: 3
Dołączył: 1.08.2011

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


Cytat(iro88 @ 28.10.2011, 22:49:32 ) *
@przemo191 nie załamuj się i staw temu czoła (nie czekaj na mnie, bo mogę nie znaleźć czasu w ten weekend) im więcej będziesz od siebie samego wymagał i stawiał sobie wyzwania tym więcej będziesz umiał, a jak dostaniesz pod nos to g. się nauczysz wink.gif


I z tym się zgodzę w 100%, nie chciałem gotowego rozwiązania tylko podpowiedzi jak to może działać.
Ale jak będziesz miał czas i chęci, to możesz zrobić jakąś małą tabelkę z kodem, na pewno się przyda.

Jeszcze raz dzięki, za wszelką pomoc.
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:58