Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Po 2 w rzędzie, gdy brakuje nieparzystego
Forum PHP.pl > Forum > PHP
tara
Witam !

Mam sobie taki mechanizm
  1. <?php
  2. ilosczdjec = count(glob("galeria/".$klasa."/*.jpg"));
  3. if ($i == $ilosczdjec)
  4. { print "</td></tr></table>";
  5. } else {
  6. if ($i%== 0)
  7. {
  8. print " </td></tr><tr>";
  9. } else {
  10. print " </td>";
  11.  
  12. }
  13. }
  14. ?>


Który powoduje że gdy wyświetlane jest zdjęcie parzyste następuje przejście do nowego rzędu i kończy zamykając tabelę.

Jednak kiedy ktoś usunie jakieś zdjęcie, całe to dzielenie się sypie ohmy.gif
Próbowałem zrobić to tak:
  1. <?php
  2. ilosczdjec = count(glob("galeria/".$klasa."/*.jpg"));
  3. if ($i == $ilosczdjec)
  4. { print "</td></tr></table>";
  5. } else {
  6. if ($rekord[0]%== 0)
  7. {
  8.  
  9. $a=$rekord[0]-1;
  10. $wynikss = mysql_query("SELECT * FROM galeria WHERE id_galerii='$klasa' AND id=$a ");
  11. while ($rekordz=mysql_fetch_row($wynikss)) {
  12. if ($rekordz[0]== ""){
  13.  
  14. print " </td></tr><tr>";
  15. } else {
  16. print " </td>";
  17. }
  18. }
  19. }
  20.  else {
  21. print " </td>";
  22.  
  23. }
  24. }
  25. }
  26. ?>

sprawdzamy czy istenieje opis zdjęcia poprzedniego, jeśli tak to kończymy rząd, jeśli nie to kontynuujemy. Ale to nie bardzo działa bo w jednym rzędzie mi wyświelta po 3 blink.gif. Czy ktoś ma jakiś inny pomysł lub skrypt, który jest niezależny od parzystości numeru zdjęcia ?
-SaraniS-
Witam
W jednej z galerii mojego autorstwa dziala taki kod:
  1. <?php
  2.  
  3. if($res = mysql_query('select * from `galeria` where `gal_id`='.$d.' order by ord asc')){
  4. while($row = mysql_fetch_array($res)){
  5. $photo_size = getimagesize('img/galeria/'.$row['path']);
  6. echo '<div style="width: 120px; height: 130px; float: left; margin: 5px;"><a href="'.$_SERVER['PHP_SELF'].'?show='.$row['id'].'" target="show_photo" onclick="var myWin = window.open(this.href,this.target,'width='.($photo_size[0] + 15).',height='.($photo_size[1] + 80).',status=no,resizable'); return false;"><img src="inc/thumbnail.php?id='.$row['path'].'&amp;size=1&amp;d=1" alt=""><div style="text-align: left;">'.$row['opis'].'</div></a></div>';
  7. }
  8. }else{
  9. //tu obsluga bledu bazy
  10. }
  11. echo '<div style="margin: 10px auto; text-align: center; clear: both;"><a href="'.$_SERVER['PHP_SELF'].'">Powrót do galerii</a></div>';
  12. ?>

Nie jest to do konca to co chcesz, ale takie rozwiazanie jest o tyle wygodne, ze zdjecia ukladaja sie samoistnie wierszami smile.gif

A co do konkretnego zliczania, to kiedys rozwiazalem to w taki mniej-wiecej sposob (w odroznieniu od poprzedniego kodu ten pisze z pamieci, wiec moga byc bledy winksmiley.jpg ):
  1. <?php
  2.  
  3. if($res = mysql_query('select * from `galeria` where `gal_id`='.$d.' order by ord asc')){
  4. $ile = mysql_num_rows($res);
  5. $i = 1; //zainicjalizuj licznik przebiegow petli
  6. while($row = mysql_fetch_array($res)){
  7. if($i % 2 == 1){ //zacznij nowy wiersz jesli licznik nieparzysty
  8. echo '<tr>';
  9. }
  10. echo '<td><img src="$row['path']"></td>';
  11. if($i == $ile){ 
  12. /* dopelnij pustymi komorkami do ilosci komorek w wierszu. tu jest to proste, ale
     dla wiekszej liczby komorek w wierszu trzeba sie troszke pobawic w obliczenia */
  13. if($i % 2 == 1){
  14. echo '<td>&nbsp;</td>';
  15. $i++;
  16. }
  17. }
  18. if($i % 2 == 0){ //zamknij wiersz jesli licznik parzysty
  19. echo '</tr>';
  20. }
  21. $i++;
  22. }
  23. }
  24.  
  25. /* LUB */
  26.  
  27. if($res = mysql_query('select * from `galeria` where `gal_id`='.$d.' order by ord asc')){
  28. $ile = mysql_num_rows($res);
  29. for($i =1; $i <= $ile; $i++){
  30. $row = mysql_fetch_array($res);
  31. if($i % 2 == 1){ //zacznij nowy wiersz jesli licznik nieparzysty
  32. echo '<tr>';
  33. }
  34. echo '<td><img src="$row['path']"></td>';
  35. if($i % 2 == 0){ //zamknij wiersz jesli licznik parzysty
  36. echo '</tr>';
  37. }
  38. }
  39. /* tu sprawdzamy, ilu komorek nam brakuje przed koncem wiersza. Wczesniej nalezy 
    odjac 1 od licznika, bo po wyjsciu z petli zostal zainkrementowany, o ile sie nie
     myle */
  40. $i--;
  41. if($i % 2 == 1){
  42. echo '<td>&nbsp;</td></tr>';
  43. }
  44. }
  45.  
  46. ?>

Gwozdziem jest tutaj sprawdzenie, czy koniec petli byl podzielny przez ilosc zdjec w wierszu (tu - 2), a jesli nie, wstawienie odpowiedniej ilosci pustych komorek (tu jednej, ale robilem takie galerie dla dowolnej ilosci miniatur w wierszu 8) )

Pozdrawiam
tara
nie bardzo... sad.gif

chciałbym coś co było by niewrażliwe na parzystośc lub nieparzystość numeru fotki. Ma ktoś jakiś pomysł ?
Hacker
jeżeli chodzi ci o to o czym myślę to kod
  1. <?php
  2. $num = mysql_num_rows($r);
  3. $string = str_repeat('<td></td>', $num%$liczba_zdjenc_na_wiersz);
  4. echo $string.'</tr></table>'
  5. ?>
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.