Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Dwie <tr>ki w pętli - jak?
Forum PHP.pl > Forum > PHP
Amanda22
Mam w bazie galerię i chciałbym wyświetlać w pętli np po 4 w wierszu miniatury fotki, a w drugim wierszu tytuły tych fotek.
Informacje te są zapisane w jednym rekordzie w bazie - nazwa pliku fotki oraz tytuł (to dla przykładu - informacji jest więcej)

Jak w jednym "obrocie" pętli wygenerować dwie <tr>ki po 4 <td>ki ?
IceManSpy
Pobierasz nazwę pliku i tytuł. A następnie w pętli while wyświetlasz to. A aby były po 4 w wierszu musisz użyć modulo 4 (załóż sobie w pętli licznik tzn przed pętlą zmienną ile = 0 a co obejście pętli dodawaj 1 , jak reszta z dzielenia będzie 0 to wtedy nowa kolumna).
Amanda22
Z jedną tr-ką (wierszami) OK, ale z dwiema?
uirapuru
Zrób pętlę w pętli:

Kod
foreach() {
echo "<tr>";
foreach() {
      echo "<td>miniaturka</td>";
}
echo "</tr>
}
Amanda22
Niebardzo kumam Twoją propozycję.

Napisałem takie coś (na przykładzie, z użyciem pętli for)

  1. <?php
  2.  
  3. $i=0;
  4. $j=0;
  5. $k=0;
  6. $l="";
  7.  
  8. echo "<table cellpadding='0' cellspacing='1' width='100%' border=1>\n<tr>\n";
  9.  
  10. for ($counter=0; $counter<13; $counter++)
  11. {
  12. //pierwszy wiersz
  13. $i++;
  14. echo '<td align="center">wiersz1/kom'.$i.' FOTKA: '.$counter.'</td>'."\n";
  15. if($i == 4)
  16. {
  17. echo '</tr><tr>'."\n";
  18. $i=0;
  19. $k=1;
  20. }
  21.  
  22. //drugi wiersz
  23. $j++;
  24. $l.='<td align="center">wiersz2/kom='.$j.' OPIS: '.$counter.'</td>'."\n";
  25. if(($k == 1))
  26. {
  27. echo $l.'</tr><tr>'."\n";
  28. $j=0;
  29. $k=0;
  30. $l="";
  31. }
  32.  
  33. }
  34. echo "</tr>\n</table>\n";
  35. ?>


Wszystko jest dobrze dopóki ilość danych jest podzielna przez 4.
Gdy zostaje reszta już nie jest tak "ładnie" - powyższy przykład

Jak toto poprawić?
Crozin
Po pierwsze: używasz tabel do prezentacji danych nietabelarycznych - semantyczny fail. Najprawdopodobniej powinieneś utworzyć listę i co najwyżej nadać jej odpowiednie formatowanie.

Jednak wracając do samego problemu. Rozwiązań jest dziesiątki, jeśli nie setki - jednak wszystkie sprowadzają się do jednego: zmienienia formatu danych (zwykła tablica dwuwymiarowa jak widzisz średnio spisuje się do wyświetlania różnych danych "seriami" (raz seria obrazów, raz seria tytułów)). Zmień sobie najpierw format danych na (przykładowo)
Kod
Array (
  Array (
    [images] => Array ( photo1.png, photo2.png, photo3.png),
    [titles] => Array ( photo1, photo2, photo3)
  ),

  Array (
    [images] => Array ( photo4.png, photo5.png, photo6.png),
    [titles] => Array ( photo4, photo5, photo6)    
  )
)
Wyświetlenie z takiego formatu nie powinno już być problemem.
Crozin
Po pierwsze: używasz tabel do prezentacji danych nietabelarycznych - semantyczny fail. Najprawdopodobniej powinieneś utworzyć listę i co najwyżej nadać jej odpowiednie formatowanie.

Jednak wracając do samego problemu. Rozwiązań jest dziesiątki, jeśli nie setki - jednak wszystkie sprowadzają się do jednego: zmienienia formatu danych (zwykła tablica dwuwymiarowa jak widzisz średnio spisuje się do wyświetlania różnych danych "seriami" (raz seria obrazów, raz seria tytułów)). Zmień sobie najpierw format danych na (przykładowo)
Kod
Array (
  Array (
    [images] => Array ( photo1.png, photo2.png, photo3.png),
    [titles] => Array ( photo1, photo2, photo3)
  ),

  Array (
    [images] => Array ( photo4.png, photo5.png, photo6.png),
    [titles] => Array ( photo4, photo5, photo6)    
  )
)
Wyświetlenie z takiego formatu nie powinno już być problemem.
XP'ek
tu masz przykład mojego kodu na 4 zdjecia w jednym wierszu:

  1. <?php
  2.  
  3. <table border='0'><tr>";
  4.  
  5.  
  6. $img = Array('1.jpg', '2.jpg', '3.jpg', '4.jpg', '5.jpg', '6.jpg', '7.jpg', '8.jpg', '9.JPG', '10.JPG', '11.JPG', '12.JPG', '13.JPG', '14.JPG', '15.JPG', '16.JPG', '17.JPG', '18.JPG', '19.JPG', '20.JPG', '21.JPG', '22.JPG', '23.JPG', '24.JPG', '25.JPG', '26.JPG', '27.JPG', '28.JPG', '29.JPG', '30.JPG', '31.JPG', '32.JPG', '33.JPG');
  7. $i = 0;
  8.  
  9. while($i<count($img)))
  10. {
  11. print "<td><a href='img/gallery/".$img[$i]."' rel='lightbox[roadtrip]'>
  12. <img src='img/gallery/".$img[$i]."' width='200' height='150' alt='' border='0'>
  13. </a></td>";
  14.  
  15. $i++;
  16.  
  17. if($i%4 == 0) {print "</tr><tr>";}
  18. }
  19.  
  20.  
  21. print "</tr></table>";
  22.  
  23. ?>
Crozin
@Up: Proponuję przeczytać treść pytania, a nie walić gotowcami (notabene niewłaściwymi) na lewo i prawo.
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.