Lista rozwijana, drzewo kategorii

0

Witam,

Mam pytanie natury logicznej. Nie wiem za bardzo, jak rozwiązać następujące zagadnienie.
Mam tabelę z kategoriami. Każdy wiersz składa się z następujących rekordów:
id | name | id_parent
Czyli odpowiednio id kategorii, jej nazwa i id kategorii nadrzędnej, do której jest przypisana dana kategoria. Id_parent o wartości "0", oznacza że jest to kategoria główna i nie ma nad nią żadnej innej.

Teraz chciałbym wpakować całą tabelę do listy rozwijanej, w której całość układałaby się w drzewo kategorii, tzn.

 
            -kategoria
            --kategoria_podrzędna_1
            --kategoria_podrzędna_2
            ----kolejny_poziom_zagnieżdżenia
            --kategoria_podrzędna_3
            -kategoria_2
            --kategoria_podrzędna_4
            ...

Mam nadzieję, że dość jasno przedstawiłem, jaki efekt chcę uzyskać. Z jednopoziomowych zagnieżdżeniem jeszcze sobie jakoś poradziłem (jeśli chodzi o te wcięcia), ale by wyświetlały się pod swoją "kategorią matką", nie mogłem sobie poradzić. A co zrobić w przypadku większej liczby zagnieżdżeń, już w ogóle nie mam pojęcia.

Będę wdzięczny za jakieś podpowiedzi, jak do dalej pociągnąć.

1

Nie wiem jak to dokładnie masz u siebie rozwiązane(czy korzystasz z ORM czy też nie) ale ja bym zrobił tak ze do kategorii dołączył metodę getChilds() zwracającą kategorie dzieci oraz hasChilds() zwracającą boolean. Później można rekurencyjnie w łatwy sposób rekurencyjnie wyświetlić takie drzewo. coś w podobie do :

public function render($kategoria) {
if($kategoria->hasChilds() {
   foreach($kategoria->getChilds() as $kat) {
      render($kategoria);
       }
  } else {
         // wyświetlenie kateogrii
    }

}
0

Nie używam ORM, teraz się o tym dowiedziałem i sobie poczytałem :) Dzięki za wskazówkę, jutro zacznę się produkować i w razie czego będę prosił o dalsze wskazówki.

1

Musiałem kiedyś zrobić zarządzalne menu z produktami oparte właśnie o drzewo "Adjaceny list" w którym można było zagnieżdżać bez końca. Do tego w każdej kategorii głównej i podkategoriach trzeba było wyświetlić ilość produktów. Pamiętam że bardzo użyteczna była biblioteka jsTree. Jest tam też kilka przykładów wykorzystania tej biblioteki. Może i tobie przyda się do czegoś.

1 użytkowników online, w tym zalogowanych: 0, gości: 1