![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 69 Pomógł: 7 Dołączył: 18.08.2010 Skąd: Rzeszów Ostrzeżenie: (10%) ![]() ![]() |
Na wstępie mówię że szukałem w google ale nie znalazłem przykładu który mógłbym mi pomóc. Potrzebuję stworzyć wielopoziomowe menu w którym można tworzyć podkategorie w nieskończoność i nie mam pojęcia jak skonstruować taki skrypt.
Baza danych: | id | | parent_id | | name | | url | | type | | menu | | poziom | | 1 | | 0 | | Link 1 | | link1 | | page | | main_menu | | 0 | | 2 | | 0 | | Link 2 | | link2 | | page | | main_menu | | 0 | | 3 | | 1 | | Sub Link 1 | |sublink1 | | page | | main_menu | | 1 | | 4 | | 1 | | Sub Link 2 | | sublink2 | | page | | main_menu | | 1 | | 5 | | 3 | | trzeci rząd | | 3rzad | | page | | main_menu | | 2 | Napisałem coś takiego, ale niestety zagłębia się tylko w 2 poziomy ntomiast chcę zrobić tak żeby poziomów było tyle ile użytkownik będzie chciał. Proszę po podpowiedź jak to można zrobić bo nie mam pojęcia jak skonstruować kod:
Ten post edytował sliwa007 28.12.2011, 18:00:04 |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 102 Pomógł: 5 Dołączył: 24.11.2006 Ostrzeżenie: (0%) ![]() ![]() |
Poczytaj o rekurencji. Zbuduj funkcję która wykorzystasz w tejże funkcji.
W takim mały skrócie:
Ten post edytował grzeee 28.12.2011, 18:07:37 -------------------- Polecam Jastrzębia Góra, serwis o nadmorskiej miejscowości.
|
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 1 333 Pomógł: 137 Dołączył: 25.03.2008 Skąd: jesteś?? Ostrzeżenie: (0%) ![]() ![]() |
Inaczej z bazą trochę:
|id|name|link|idRodzica|+ (Nie potrzebna Ci informacja o zagłębieni, przy ew. przeniesieniu zakładki będziesz zbędnie poprawiać te pola) 1. Pobierasz wszystkie dane 2. Wybierasz wszystkie z idRodzica==null 3. Wypisujesz je wraz z sprawdzeniem idRodzica== do aktualnej pozycji - tutaj skorzystaj z podpowiedzi @grzeee, czyli wypisując pole sprawdz czy ma dzieci, jeśli ma znów wypisuj tą samą funkcją. 4. Wykorzystując wszystkie dane = koniec Całość będzie wypisywana w sposób pierwszy poziom i jego dzieci, dzieci dzieci i kolejna zakładka z idRodzica==0 Mam nadzieję, że rozumiesz. :-) Możesz poczytać o drzewach - to temat o "układzie hierarchij w kodzie" czyli menu bez określonych poziomów, fora takiej jak to, 1 temat może mieć wiele tematów, a on zaś tematy i wątki. Ten post edytował ShadowD 28.12.2011, 18:29:56 -------------------- Mój blog - o wszystkim i niczym ale zazwyczaj związane z informatyką! ;-)
Githube Usługi spawalnicze i monterskie | Park linowy Lublin i Okunince |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 1 729 Pomógł: 346 Dołączył: 4.04.2009 Ostrzeżenie: (0%) ![]() ![]() |
Struktura drzewiasta? http://blog.bexlab.pl/struktura-drzewiasta...nych-odc-1/366/
-------------------- |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 69 Pomógł: 7 Dołączył: 18.08.2010 Skąd: Rzeszów Ostrzeżenie: (10%) ![]() ![]() |
Próbowałem zrobić tak jak mówiłeś ale cos mi nie działa. Mógłbyś sprawdzić co może być nie tak ?
Ten post edytował sliwa007 29.12.2011, 09:15:58 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 2 178 Pomógł: 596 Dołączył: 25.09.2009 Skąd: Piwniczna-Zdrój Ostrzeżenie: (0%) ![]() ![]() |
Jeśli to ma być funkcja rekurencyjna (bo tak się to nazywa), to powinna posiadać jakiś parametr/argument, którym w tym przypadku powinno być id_rodzica.
Oczywiście jest to najmniej optymalny sposób, który sprawdzi się w przypadku menu z niewielką liczbą podmenu. Natomiast sposobów na implementację drzewa kategorii jest co najmniej kilka, a powyższy jest najwolniejszym. |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 1 333 Pomógł: 137 Dołączył: 25.03.2008 Skąd: jesteś?? Ostrzeżenie: (0%) ![]() ![]() |
Niech się uczy od razu dobrej metody i nie zadawania stu zapytań do mysql..
Spróbuj wybrać dane z mysql i na nich operować nie tworząc kilku zapytań tylko jedno na początku. -------------------- Mój blog - o wszystkim i niczym ale zazwyczaj związane z informatyką! ;-)
Githube Usługi spawalnicze i monterskie | Park linowy Lublin i Okunince |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 69 Pomógł: 7 Dołączył: 18.08.2010 Skąd: Rzeszów Ostrzeżenie: (10%) ![]() ![]() |
znalazlem skrypt tworzący drzwo kategorii przez tylko jedno zapytanie, ale mam problem z wyświetlenim ich w poprawnje kolejności. Powiedzcie co robię źle.
Wynik wysiwetlany jest w ten sposób: -Link 1 -Link 2 --Sub Link 1 --Sub Link 2 ----trzeci rzÄ d a powinien być w ten sposób: -Link 1 --Sub Link 1 ----trzeci rzÄ d --Sub Link 2 -Link 2 Wiem że problem jest z sortowaniem po parent_id ale nie wiem jak to obejść. Skorzystałem ze skryptu na tej stronie. http://blog-programisty.pl/php/drzewo-kate...ja-rekurencyjna |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 1 729 Pomógł: 346 Dołączył: 4.04.2009 Ostrzeżenie: (0%) ![]() ![]() |
Zerknij w tego linka co podałęm i przeczytaj cały artykuł (ma kilka części) stronę mysql tam masz zrobioną praktycznie całą, a podpiąć pod to php to pikuś wystarczy chwilę pomyśleć.
-------------------- |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 69 Pomógł: 7 Dołączył: 18.08.2010 Skąd: Rzeszów Ostrzeżenie: (10%) ![]() ![]() |
Problem rozwiązany wywaliłem z kodu mortusa 2 zapytanie i wszystko chodzi cacy. Kod ma teraz tylko 1 zapytanie jest bardzo krótki:
Ten post edytował sliwa007 29.12.2011, 15:39:38 |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 2 178 Pomógł: 596 Dołączył: 25.09.2009 Skąd: Piwniczna-Zdrój Ostrzeżenie: (0%) ![]() ![]() |
Kod nie miał być krótszy, bo to nie o to chodzi. Jak dla mnie Twój kod teraz generuje puste listy <ul> </ul>. Nie miałeś się pozbywać zapytania, które wylicza liczbę dzieci, ale miałeś zrobić z tych dwóch zapytań jedno.
|
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 69 Pomógł: 7 Dołączył: 18.08.2010 Skąd: Rzeszów Ostrzeżenie: (10%) ![]() ![]() |
No jak, nie generuje pustych ul bo skrypt się wykonuje do póki nie wyczerpie się parent_id. tagi ul są w echo gdyby były generowane byłoby je widać w kodzie ? Dobrze myślę ?
Ten post edytował sliwa007 29.12.2011, 16:22:59 |
|
|
![]()
Post
#13
|
|
![]() Grupa: Zarejestrowani Postów: 1 333 Pomógł: 137 Dołączył: 25.03.2008 Skąd: jesteś?? Ostrzeżenie: (0%) ![]() ![]() |
Wiesz nie chcę nic mówić, ale Twój kod w cale nie wykonuje 1 zapytania, a tyle zapytań ile ma poziomów (wielokrotnie korzystasz z 1 zapytania). Kolega podał poradnik o drzewach, jest on całkiem ciekawy może warto by go przeczytać? Opisane jest tam (swoją drogą nawet w 2 sposobach) jak rozwiązać twój problem, mało tego są gotowe przykłady i zalety/wady danego rozwiązania.
-------------------- Mój blog - o wszystkim i niczym ale zazwyczaj związane z informatyką! ;-)
Githube Usługi spawalnicze i monterskie | Park linowy Lublin i Okunince |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 69 Pomógł: 7 Dołączył: 18.08.2010 Skąd: Rzeszów Ostrzeżenie: (10%) ![]() ![]() |
Witam. Chyba rozwiązałem problem. Stworzyłem 2 funkcje jedna odpowiada za wyświetlenie nagłówka menu oraz za pobranie wszystkich danych z tablicy, natomiast druga za tworzenie menu. Czy to rozwiązanie jest ok ? Kod wygląda tak:
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.07.2025 - 13:11 |