Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: generowanie drzewka z danych z mysql
Forum PHP.pl > Forum > Przedszkole
AxZx
witam


mam problem z wygenerowaniem kodu html takiego drzewka
http://gosu.pl/demo/mygosumenu/1.5/example1.html

kod tego drzewka:
  1. <div class="DynamicTree">
  2. <div class="top">Tree View</div>
  3.  
  4. <div class="wrap" id="tree">
  5. <div class="folder">Node 1
  6. <div class="folder">Node 1.1
  7. <div class="folder">Node 1.1.1
  8. <div class="doc"><a href="example1.html" title="Node 1.1.1.1" target="_self">Node 1.1.1.1</a></div>
  9. </div>
  10. </div>
  11. <div class="doc"><a href="example1.html">Node 1.2</a></div>
  12. </div>
  13.  
  14. <div class="doc"><a href="example1.html">Node 2</a></div>
  15. <div class="doc"><a href="example1.html">Node 3</a></div>
  16. <div class="doc"><a href="example1.html">Node 4</a></div>
  17. <div class="folder">Node 5
  18. <div class="doc"><a href="example1.html">Node 5.1</a></div>
  19. <div class="doc"><a href="example1.html">Node 5.2</a></div>
  20. </div>
  21.  
  22. </div>
  23. </div>


a kolumny w tabeli mam takie:
ID | nazwa | childs

childs wskazuje ile jest podkategorii

poki co zrobilem cos takiego
  1. <?php
  2. $wynik = '';
  3.  
  4. foreach($drzewo->getNodes() as $klucz=>$war){
  5.  
  6. if($war['childs'] > 0){
  7. $wynik .= '<div class="folder"> '.$war['nazwa'];
  8. }
  9. if($war['childs'] == 0){
  10. $wynik .= '<div class="doc"> '.$war['nazwa'].'</div>
  11. ';
  12.  
  13. }
  14. }
  15.  
  16. $wynik .= '</div></div>';
  17.  
  18. echo $wynik;
  19. ?>


ale wiadomo - nie dziala,
ma ktos pomysl jak to zorganizowac?
tiraeth
Najlepiej w bazie trzymać id, kategorię oraz id_matki

Taki przykładzik, przerób sobie tak jak potrzebujesz:

  1. <?php
  2. $connect = mysql_connect('host', 'user', 'pass');
  3. mysql_select_db('baza', $connect);
  4.  
  5. function liczby($liczba, $i = 0)
  6. {
  7.  $res = mysql_query("SELECT * FROM tabela WHERE motherid = ".$liczba);
  8.  while($row = mysql_fetch_assoc($res))
  9.  {
  10. echo ($liczba == 0) ? '<b>' : '';
  11.  
  12. for($a=0; $a<$i; $a++)
  13. {
  14.  echo '...';
  15. }
  16. echo $row['title'];
  17. echo ($liczba == 0) ? '</b>' : '';
  18. echo '<br />'."\n";
  19. liczby($row['id'], $i+1);
  20.  }
  21. }
  22.  
  23. liczby(0);
  24. ?>


Przykładowy wynik:
Kod
<b>Kategoria 1</b><br />
...Podkategoria 3/1<br />
......Podkategoria 5/3<br />
<b>Kategoria 2</b><br />
...Podkategoria 4/2<br />


Potem możesz sprawdzać czy dla X czy jakiś rekord ma właśnie motherid ustawione na ten X i jezeli tak to wyswietlasz ikonke folderu, inaczej ikonke normalną smile.gif
AxZx
dzieki za dobre checi ale niestety nie o to mi chodzilo.
chce uzyskac taki HTML jaki napisalem bo chce uzyc tego drzewka.
wchodziles na strone ktorej link podalem?
zobacz jak to drzewko ladnie wyglada i jaka fajna ma mozliwosc smile.gif
mozna zwijac cala galaz smile.gif i wlasnietaki efekt staram sie uzyskac ... niestety bezskutecznie.


EDIT
prawie dobrze

  1. <?php
  2. $wynik = '<div class="DynamicTree">
  3. <div class="top">Tree View</div>
  4. <div class="wrap" id="tree">';
  5.  
  6.  
  7. $ilosc_dzieci=0;
  8. $iter_rodzic=0;
  9. $iter_dziecko=0;
  10.  
  11. foreach($drzewo->getNodes() as $klucz=>$war){
  12.  
  13.  
  14. if($war['childs'] > 0){
  15. $wynik .= '<div class="folder"> '.$war['nazwa'].'...'.$war['childs'].'
  16. ';
  17. $ilosc_dzieci=$war['childs'];
  18. $iter_rodzic++;
  19. }
  20. if($war['childs'] == 0){
  21. $wynik .= '<div class="doc"> '.$war['nazwa'].'</div>
  22. ';
  23. $iter_dziecko++;
  24. }
  25. if($ilosc_dzieci==$iter_dziecko){
  26. for($b=0;$b<$iter_rodzic;$b++){
  27. $wynik .= '</div>';
  28. }
  29. $ilosc_dzieci=0;
  30. $iter_dziecko=0;
  31. }
  32. }
  33.  
  34. $wynik .= '</div></div>';
  35.  
  36. echo $wynik;
  37. ?>


ktos ma ochote na burze mozgu?
czy wogole da sie to zrobic w ten sposob co ja kombinuje?
ActivePlayer
sposob jaki podal tiraeth jest latwiejszy do wykonania. nie trzymasz w polu childs id dzieci jakie posiada kategoria, tylko trzymasz w katerorii id matki. wtedy latwiej pobrac wszystkie dzieci danej kategorii itd.
AxZx
to doradz mi prosze jak zrobic takie drzewko, zebym mogl zwijac cale galezie

trzymam w tabeli takie dane jak:
z danych w tabeli moge wyciagnac takie dane jak:
ilosc dzieci,
id glownej kategorii
id nadrzednej kategorii

ale co mi to daje?

jak zrobic drzewko ktore bede mogl zwijac i rozwijac?
tiraeth
Zwijanie i rozwijanie drzewka to już tylko kwestia HTML'a a nie php... mój kod bardzo dobrze się do tego nadaje smile.gif
AxZx
wiem za co odpowiada HTML a za co php. problemem jest to w jaki sposob wygenerowac taki kod HTML zeby mozna bylo zwijac wybrane galezie.
problem tkwi w tym ze jezeli zwijam glowna galaz to musza sie tez ukryc wszystkie galezie ktore naleza do tej glownej.


pozatym mam troche inaczej zapisane dane w bazie, nie moge wykorzystac Twojego sposobu, mam poprostu wyrzucane dane w kolejnosci tak jak sa w hierarchii drzewa.

pokaz mi prosze przyklad dzialania twojego kodu - tak zebym zobaczyl ze rzeczywiscie mozna zwijac i rozwijac poszczegolne galezie, najlepiej jeszcze zeby bylo to zgodne z
XHTML 1.0 strict



EDIT
Wkoncu wymyslilem

troche operacji na tablicach i wszystko elegancko smiga.
jezeli ktos chcialby miec ladne drzewko to prosze sie zglosic na PW smile.gif
The Night Shadow
  1. <?php
  2. $connect = mysql_connect('host', 'user', 'pass');
  3. mysql_select_db('baza', $connect);
  4.  
  5. function liczby($liczba, $i = 0)
  6. {
  7.  $res = mysql_query("SELECT * FROM tabela WHERE motherid = ".$liczba);
  8.  while($row = mysql_fetch_assoc($res))
  9.  {
  10. echo ($liczba == 0) ? '<b>' : '';
  11.  
  12. for($a=0; $a<$i; $a++)
  13. {
  14.  echo '...';
  15. }
  16. echo $row['title'];
  17. echo ($liczba == 0) ? '</b>' : '';
  18. echo '<br />'."\n";
  19. liczby($row['id'], $i+1);
  20.  }
  21. }
  22.  
  23. liczby(0);
  24. ?>


Co do tego skryptu... jak powinien wyglądać skrypt usuwający dany dział? Należałoby usunąć dział, wszystki poddziały i pliki w nich się znajdując.
Folder plików to galerie
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.