Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Zagnieżdżone kategorie, metoda wyświetlenia
Forum PHP.pl > Forum > Przedszkole
Kategorie
Mam tablicę obiektów:
  1. $aCategory = array(
  2. ob('id'=>1, 'depth'=>0,'title'=>'root'),
  3. ob('id'=>2, 'depth'=>1,'title'=>'kat_1'),
  4. ob('id'=>3, 'depth'=>2,'title'=>'kat_1_1'),
  5. ob('id'=>4, 'depth'=>3,'title'=>'kat_1_1_1'),
  6. ob('id'=>5, 'depth'=>1,'title'=>'kat_2'),
  7. ob('id'=>5, 'depth'=>2,'title'=>'kat_2_1'),
  8. ob('id'=>5, 'depth'=>2,'title'=>'kat_2_2'),
  9. )

W założeniu może być dowolna głębokość

i chciałbym wyświetlić ją w formie:
  1. <div>root
  2. <div>
  3. kat_1
  4. <div>kat_1_1
  5. <div>kat_1_1_1</div>
  6. </div>
  7. </div>
  8. <div>
  9. kat_2
  10. <div>kat_2_1</div>
  11. <div>kat_2_2</div>
  12. </div>


Mam cały czas problemy z pętlami i w którym momencie pozamykać divy
  1. foreach($aCategory as $oCategory){
  2. echo '<div>'.$oCategory->depth;
  3. //tu nie wiem co począć dalej
  4. }
olszakpawel
wydaje mi sie ze ze w takiej formi jak masz to zrobione bedzie ciezko wyswietlic taka strukture, nie lepiej by bylo jakby jeden obiekt zawieral id jego rodzica, a nastepnie rekurencyjenie wyswietlic cala strukture jak o to ci chodzi a jak nie to przybliz jeszcze bardziej temat
Kategorie
Niestety nie mogę zrobić tego w ten sposób, Zrobienie czegoś takiego znacznie utrudniłoby manipulacje danymi w bazie. Tutaj wystarczy dobry if siedzę nad tym od rana, ale cóż.
Daiquiri
A nie możesz po prostu stawiać tyle zamknięć diva co różnica między aktualnym depth a następnym?

Czyli masz 3 stany depth Poprzedni | Aktualny | Następny. Jeżeli aktualny stan depth jest większy od poprzedniego to musisz otworzyć div. Natomiast jeżeli aktualny stan depth jest większy od następnego to zamykamy (tyle razy ile wynosi różnica pomiędzy nimi). Musisz oczywiście mieć w takim układzie dane ułożone w odpowiedniej kolejności.
Kategorie
Dane zawszę będą w dobrej kolejności, jutro dokładnie sprawdzę twój pomysł (na innym kompie mam bazę i całość)
Kategorie
Co do otwierania div-ów to muszę za każdym razem otwierać diva liczy się tylko kiedy zamknąć.
To mniej więcej coś takiego jutro spróbuje
  1.  
  2.  
  3. foreach($aCategory as $key=>$oCategory){
  4. echo '<div>'.$oCategory->depth;
  5. if(isset(aCategory[$key+1] ) && $oCategory->=depth>aCategory[$key+1]){
  6. for($i = $oCategory->depth - aCategory[$key+1]->depth; $i>=0; $i--){
  7. echo '</div>';
  8. }
  9. } elseif(!isset(aCategory[$key+1]){
  10. for($i = $oCategory->depth; $i>=0; $i--){
  11. echo '</div>';
  12. }
  13. }
  14.  
  15.  
  16. }

Zapewne odrobinę błędnie napisałem, ale nie mam jak teraz tego sprawdzić
erix
http://eriz.pcinside.pl/weblog/php-feat-my...rzewka-143.html

Myślę, że Ci się przyda. wink.gif
Kategorie
Tak wygląda rozwiązanie może komuś się przyda:
  1. foreach($this->aCategory as $key=>$oCategory){
  2.  
  3. echo '<div>';
  4. echo $oCategory->categoryName;
  5. if( isset($this->aCategory[$key+1])){
  6. $next = $this->aCategory[$key+1]->depth;
  7. $curr = $oCategory->depth;
  8.  
  9. if($next<$curr){
  10. for($x=0;$x<=($curr-$next);$x++){
  11. echo '</div>';
  12. }
  13. }
  14.  
  15. if($next==$curr){
  16. echo '</div>';
  17. }
  18.  
  19. }else{
  20.  
  21. for($i = $oCategory->depth;$i>=0;$i--){
  22. echo '</div>';
  23. }
  24.  
  25. }
  26.  
  27. }
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.