Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Smarty] problem z foreach
Forum PHP.pl > Forum > Gotowe rozwiązania > Systemy szablonów
decha-design
Witam,

Mam mały problem z pętlą foreach. Mam taki kod PHP:

  1. <?php
  2. $categories = $db -> get_results("SELECT * FROM `categories`");
  3.  
  4. $countcategories = count($categories);
  5.  
  6. if($countcategories > 0) {
  7.  
  8. foreach ($categories as $cat) {
  9.  
  10. $row['id'] = $cat -> id;
  11. $row['title'] = $cat -> title;
  12. $categories2[] = $row;
  13.  
  14. $photos = $db -> get_results("SELECT * FROM `photos` WHERE `cat`='".$cat -> id."'");
  15.  
  16. $countphotos = count($photos);
  17.  
  18. if($countphotos > 0) {
  19.  
  20. foreach ($photos as $photo) {
  21.  
  22. $row2['id'] = $photo -> id;
  23. $row2['cat'] = $photo -> cat;
  24. $row2['title'] = $photo -> title;
  25. $row2['image'] = $photo -> image;
  26. $photos2[] = $row2;
  27.  
  28. }
  29.  
  30. $smarty -> assign('photos'.$cat->id, $photos2);
  31.  
  32. $photos2 = '';
  33.  
  34. }
  35.  
  36. }
  37.  
  38. $smarty -> assign('categories', $categories2);
  39.  
  40. }
  41. ?>


Chyba nie muszę go opisywać. I mam w pliku tpl taki kod:

  1. {foreach item=cat from=$categories}
  2. <table width="100%" cellspacing="10" cellpadding="10">
  3. <tr>
  4. <td colspan="3" align="left" class="photos_cat">Kategoria: {$cat.title}</td>
  5. </tr>
  6. {assign var=i value=1}
  7. {foreach item=photo from=$photos2$cat.id}
  8. <tr>
  9. <td><span class="photo_id">{$i++}.</span> {$photo.title}</td>
  10. <td width="35"><a href="admin.php?page=photos&act=edit">[ E ]</a></td>
  11. <td width="35"><a href="admin.php?page=photos&act=delete">[ U ]</a></td>
  12. </tr>
  13. {/foreach}
  14. <br />
  15. {/foreach}


Najpierw wykonuje się pętla foreach, która wyświetla kategorie, a w niej następna która wyświetla zdjęcia. I tutaj zaczyna się problem. W pliku PHP przypisałem tabele ze zdjęciami $photos2 do nazwy zmiennej 'photosnumerkategorii'

  1. <?php
  2. $smarty -> assign('photos'.$cat->id, $photos2);
  3. ?>


Jeżeli w drugiej pętli foreach jako argument from dam np. $photos2, gdzie dwójka to numer ID kategorii to wyświetla odpowiednie zdjęcia należące do kategorii 2 itd. Niestety nie wiem jak zrobić aby było to zależne od poprzedniej pętli, bo moje rozwiązanie nie działa: $photos$cat.id.

Proszę o pomoc, bo już nie wiem jak to zrobić. Chyba wszystkiego co znam już próbowałem.

Pozdrawiam.
Decha

P.S. Jaśniej tego opisać nie potrafię. Mam nadzieję, że wiecie o co chodzi.
JoShiMa
Pętla w pętli ma sens, jeśli masz tablicę wielowymiarową. A jak wygląda u Ciebie struktura danych? Nie jest to dla mnie jasne.

Ja bym zrobiła jedną tablicę $categories. Jako indeksy dałabym ID kategorii a jako zawartość tablicę zdjęć do każdej kategorii. Wtedy zrobienie tego zagnieżdżonymi pętlami byłoby jak bułka z masłem.
decha-design
Dzięki wielki ... nie pomyślałem o tablicy wielowymiarowej nawet ... chciałem przekazać obydwie, osobno ...

Wystarczyło strukturę tablic zmienić i działa ...

Thx. ...
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.