Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][PHP] Tworzenie drzewa
Forum PHP.pl > Forum > Przedszkole
bemol
Witam.

Muszę stworzyć strukturę katalogową, w tym przypadku będzie to struktura drzewa, ponieważ jeden z katalogów jest głównym.
Uproszczona struktura folderu wygląda następująco:
  1. $array[$i]->id
  2. $array[$i]->nazwa
  3. $array[$i]->podrzedny_id
  4. $array[$i]->nadrzedny_id
  5. $array[$i]->level
  6. // $array[$i]->id i $array[$i]->podrzedny_id są zawsze takie same


Katalog główny (o id równym 1) w polu nadrzedny_id ma NULL, katalogi znajdujące się w katalogu głównym to takie, które mają w nadrzedny_id = 1 itd analogicznie.

Potrzebuję stworzyć html na podstawie tego, który będzie wyglądał następująco:
  1. <ul>
  2. <li>Catalog1
  3. <ul>
  4. <li>Subcatalog1
  5. <ul>
  6. <li>
  7. Subsubcatalog1
  8. </li>
  9. <li>
  10. Subsubcatalog2
  11. </li>
  12. </ul>
  13. </li>
  14. <li>
  15. Item2
  16. </li>
  17. <li>
  18. Item3
  19. </li>
  20. </ul>
  21. </li>
  22. <li>
  23. Catalog2
  24. </li>
  25. </ul>


W jaki sposób się do tego zabrać? Proszę o pomoc.
szalek01
Tu masz przykłady http://www.jstree.com/ (nested) jednak poczytaj o wydajnościach. W tym wypadku łatwo jest pobrać cześć drzewa z bazy 1 zapytaniem ale już dopisanie powoduje przepisywanie wielu rekordów.
CuteOne
Kategorie to zmora programistów wink.gif nie problem napisać zapytania, które pobiorą drzewko kategorii, problemem jest wydajność. W jednym z portali, dla których pisałem modły stosowano metodę IP - http://blog.mwojcik.pl/2008/02/17/drzewa-k...-php-metoda-ip/ zdaje egzamin przy niewielkiej ilości gałęzi/liści i dużym zagłębieniu.

Ja bym proponował zrobić to co robię do dnia dzisiejszego - zapisać całe drzewo do pliku JSON i za pomocą JS wygenerować je już po stronie przeglądarki.
b4rt3kk
Moim zdaniem wystarczy pole id_rodzica. I zrobić te rekurencyjnie.

  1. function wyszukajDzieci($id_pola) {
  2. foreach($tablica as $key => $value) {
  3. if ($value['id_rodzica'] == $id_pola) {
  4. echo $value['nazwa_pola']; // wypisuje dzieci dla obecnego węzła
  5. wyszukajDzieci($value['id_pola']); // szuka dzieci dziecka
  6. }
  7. }
  8. }


Przy założeniu, że jest to dwuwymiarowa tablica o postaci:

  1. $tablica = array(
  2. array('id_pola' => 10, 'id_rodzica' => 1, 'nazwa_pola' => 'costam'),
  3. array('id_pola' => 11, 'id_rodzica' => 1, 'nazwa_pola' => 'costam1'),
  4. // itd.
  5. );
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.