Wielopoziomowe menu rekurencja |
Wielopoziomowe menu rekurencja |
12.09.2017, 11:51:17
Post
#1
|
|
Grupa: Zarejestrowani Postów: 184 Pomógł: 2 Dołączył: 3.02.2013 Ostrzeżenie: (0%) |
Witam, od jakiegoś czas główkuję nad rozwiązaniem problemu wielopoziomowego menu generowanego na podstawie bazy, chodzi mi o coś w tym stylu:
<ul> <li>1</li> <li>2 <ul> <li>2-1</li> <li>2-2 <ul> <li>2-2-1</li> <li>2-2-2</li> </ul> </li> </ul> <li> </ul> struktura bazy danych wyglądała by następująca: ID | PARENT_ID | NAME | 1 | 0 | 1 | 2 | 0 | 2 | 3 | 2 | 2-1 | 4 | 2 | 2-2 | 5 | 4 | 2-2-1 | 6 | 4 | 2-2-2 | wiem że mógłbym wykorzystać rekurencje która przy każdym powtórzeniu wyszukiwała by coraz niższego poziomu drzewa zaczynając od 0, jednak jeżeli będę miał 10 opcji, w każdej po 5 podopcji i jeszcze w co 2 podopcji kolejne dwie to naglę ilość zapytań do bazy będzie astronomiczna, a to tylko podczas rysowania samego menu, dlatego chce wykonać 1 zapytanie za pomocą którego pobieram całą bazę i zrzucam ją do tablicy i na niej chce operować, jednak wszystkie próby moje napisania tego kończyły się komunikatem Fatal error: Allowed memory size of 536870912 bytes exhausted. Nie mam bladego pojęcia jak podejść do tego w taki sposób aby nie powstała mi wieczna pętla. Szukałem różnych rozwiązań wykorzystujących rekurencje jednak znaczna ilość z nich operowała na takiej oto strukturze: Jeżeli ktoś zna gotowy przykład albo chociaż coś na bazie czego mógłbym napisać sobie taką funkcję to bardzo proszę o pomoc |
|
|
12.09.2017, 11:54:15
Post
#2
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) |
|
|
|
12.09.2017, 12:26:27
Post
#3
|
|
Grupa: Zarejestrowani Postów: 184 Pomógł: 2 Dołączył: 3.02.2013 Ostrzeżenie: (0%) |
no rozwiązanie też trochę słabe bo aby zbudować całe menu musiałem przerobić to w taki oto sposób:
przy bazie np 50 rekordów trochę słabo widzę wydajność tego + jeszcze trzeba by dopisać 3 funkcję która zbuduje na podstawie takiej tabeli kod html i tutaj też będzie potrzebna rekurencja. Ten post edytował troian 12.09.2017, 12:30:38 |
|
|
12.09.2017, 13:04:33
Post
#4
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) |
Ale jaki masz problem? Masz typowy use case gdzie masz zbudować menu na podstawie tablicy id-parent_id. Jest pełno w sieci rozwiązań jak to zbudować. To co Ci podesłałem to jeden z przykładów i tam też jest wiele rozwiązań.
Może lepiej napisz dokładnie czego chcesz? |
|
|
13.09.2017, 07:37:08
Post
#5
|
|
Grupa: Zarejestrowani Postów: 184 Pomógł: 2 Dołączył: 3.02.2013 Ostrzeżenie: (0%) |
Ale jaki masz problem? Masz typowy use case gdzie masz zbudować menu na podstawie tablicy id-parent_id. Jest pełno w sieci rozwiązań jak to zbudować. To co Ci podesłałem to jeden z przykładów i tam też jest wiele rozwiązań. Może lepiej napisz dokładnie czego chcesz? Masz rację jednak ja albo jestem jakiś nie... albo nie potrafię korzystać z google Chodzi mi o coś podobnego do tego co mi zaprezentowałeś tylko operującego np na 1 funkcji oraz 1 zmiennej do której zapisuje zrzut struktury z sql, rozwiązanie podane UP nie jest złe tylko boje się że przy dużym menu zacznie po prostu nie potrzebnie marnować zasoby serwera, jeżeli się mylę to mnie popraw. Chciałem napisać coś na takiej zasadzie: function menu($id=0) { $data = $this->data; // tutaj znajduje sie cala tablica menu pobrana wcześniej z sql forech($data as $key=>$value) [...] i bezpośrednio budować menu w postaci html <ul><li> itd... i w przypadku w którym natrafia np na $value->parent_id wykonuje jeszcze raz funkcje $this->menu($this->parent_id); tylko w żaden sposób nie potrafię wymyślisz jak powinna wyglądać taka funkcja aby prawidłowo operowała na bazie i generowała wyjściowy kod html } edit; Udało mi się napisać skrypt który działa w oparciu o 2 funkcję oto moje dzieło:
Pewnie szło by to zrobić lepiej ale ważne że działa, może komuś się przyda to zostawię to tutaj Ten post edytował troian 13.09.2017, 11:19:16 |
|
|
Wersja Lo-Fi | Aktualny czas: 27.04.2024 - 06:45 |