Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Zagnieżdżone kategorie, metoda wyświetlenia
-Kategorie-
post 10.08.2011, 13:32:20
Post #1





Goście







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. }
Go to the top of the page
+Quote Post
olszakpawel
post 10.08.2011, 15:30:39
Post #2





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 14.06.2011

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
-Kategorie-
post 10.08.2011, 16:12:04
Post #3





Goście







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óż.
Go to the top of the page
+Quote Post
Daiquiri
post 10.08.2011, 16:25:37
Post #4





Grupa: Administratorzy
Postów: 1 552
Pomógł: 211
Dołączył: 7.07.2009
Skąd: NJ




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.
Go to the top of the page
+Quote Post
-Kategorie-
post 10.08.2011, 18:32:38
Post #5





Goście







Dane zawszę będą w dobrej kolejności, jutro dokładnie sprawdzę twój pomysł (na innym kompie mam bazę i całość)
Go to the top of the page
+Quote Post
-Kategorie-
post 10.08.2011, 18:58:13
Post #6





Goście







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ć
Go to the top of the page
+Quote Post
erix
post 10.08.2011, 20:25:44
Post #7





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




http://eriz.pcinside.pl/weblog/php-feat-my...rzewka-143.html

Myślę, że Ci się przyda. wink.gif


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
-Kategorie-
post 11.08.2011, 11:13:56
Post #8





Goście







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. }
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.06.2025 - 05:56