Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Galeria zdjęć ładuje losowe pliki
Forum PHP.pl > Forum > Przedszkole
Bedrez
Witam, kożystam ze skryptu, który ładuje losowo zdjęcia. Pliki zdjęciowe rozpoczynają się od "1" i idą w górę. Niestety bezskutecznie staram się zmienić skrypt tak aby zdjęcia wczytywały się uporządkowanie.

Proszę o pomoc

  1. <?php
  2. //wczytanie obrazków z katalogu galeria/mini/
  3. $tablica = array();
  4. $z = 0;
  5. foreach (new DirectoryIterator('galeria/mini/') as $fileInfo) {
  6. $e = $fileInfo->getFilename();
  7. $rozszezenie = array_pop(explode(".", $e));
  8. if( ($rozszezenie=='jpg') || ($rozszezenie=='png') ) {
  9. $z = $z + 1;
  10. $tablica[$z] = $e;
  11. }
  12. }
  13. if(!empty($_GET['str'])) {
  14. $strt = $_GET['str'];
  15. } else {
  16. $strt = 1;
  17. }
  18. if($strt>1) { $str = ($strt-1) * 8; } else { $str = 1; }
  19. $max = $str + 7;
  20. if((count($tablica))<$max) { $max = count($tablica); }
  21. if(!empty($tablica)) {
  22. echo '<div style="width: 100%; float: left;"><table width="" border="0" cellspacing="0" cellpadding="10" align="left" class="galeria-tab"><tr>';
  23. $wiersz = 0;
  24. for($i=$str; $i<=$max; $i++) {
  25. echo '<td><a href="galeria/'.$tablica[$i].'" rel="shadowbox[ref]"><img src="galeria/mini/'.$tablica[$i].'" border="0"></a></td>';
  26. $wiersz = $wiersz + 1;
  27. if($wiersz % 4 == 0) { echo '</tr><tr>'; }
  28. }
  29. echo '</tr></table></div>';
  30. }
  31. //paginacja
  32. $ilosc_stron = count($tablica)/8;
  33. $ilosc_stron = ceil($ilosc_stron);
  34. if($ilosc_stron>1) {
  35. echo '<div style="width: 100%; float: left;"><ul class="paginacja">';
  36. for($i=1; $i<=$ilosc_stron; $i++) {
  37. if($strt==$i) { $zaz = ' class="p_on"'; } else { $zaz = ''; }
  38. if($i==1) {
  39. echo '<li'.$zaz.'><a href="'.$url.$_SESSION['lang'].'/'.$_GET['s'].'.html">'.$i.'</a></li>';
  40. } else {
  41. echo '<li'.$zaz.'><a href="'.$url.$_SESSION['lang'].'/'.$_GET['s'].','.$i.'.html">'.$i.'</a></li>';
  42. }
  43. }
  44. echo '</ul></div>';
  45. }
  46. ?>
nospor
Cytat
Niestety bezskutecznie staram
No ale co robisz, ze niby tak się starasz? Bo chyba siłą woli nie próbujesz tego sortować? wink.gif

Ta tablica:
$tablica
zawiera listę twoich zdjęć. Wystarczy że ją posortujesz - masa do tego funkcji jest w manualu.
Bedrez
Ok, już szukam smile.gif

Specjalnie zainstalowałem xamppa do testowania różnych skryptów sortowania array lecz cały czas mam problem z rewrite w xamppie i działa mi tylko główna strona bez podstron dla tego muszę testować znalezione skrypty na głównym serwerze. Poprawiam tylko ten skrypt w galerii a tak to nie pracuje w PHPie.
Proszę o dalszą pomoc

Jeśli ktoś ma podobne problemy z mod_rewrite xampp to swój problem rozwiązałem instalując starszą wersję xamppa 1.6.7 i stosując rozwiązanie z usunięciem # w configu i zmianą z None na All (standardowy poradnik do xampp jak poradzić sobie z mod_rewrite).

Problem rozwiązany.

  1. <script type="text/javascript">
  2. Shadowbox.init();
  3. </script>
  4. <?php
  5. //wczytanie obrazków z katalogu galeria/mini/
  6. $tablica = array();
  7. $z = 0;
  8. foreach (new DirectoryIterator('galeria/mini/') as $fileInfo) {
  9. $e = $fileInfo->getFilename();
  10. $rozszezenie = array_pop(explode(".", $e));
  11. if( ($rozszezenie=='jpg') || ($rozszezenie=='png') ) {
  12. $z = $z + 1;
  13. $tablica[$z] = $e;
  14. sort($tablica);
  15. reset($tablica);
  16. while (list($key, $val) = each($tablica)) {
  17.  
  18. }
  19. }
  20.  
  21. }
  22. if(!empty($_GET['str'])) {
  23. $strt = $_GET['str'];
  24. } else {
  25. $strt = 1;
  26. }
  27. if($strt>1) { $str = ($strt-1) * 8; } else { $str = 1; }
  28. $max = $str + 7;
  29. if((count($tablica))<$max) { $max = count($tablica); }
  30. if(!empty($tablica)) {
  31. echo '<div style="width: 100%; float: left;"><table width="" border="0" cellspacing="0" cellpadding="10" align="left" class="galeria-tab"><tr>';
  32. $wiersz = 0;
  33. for($i=$str; $i<=$max; $i++) {
  34. echo '<td><a href="galeria/'.$tablica[$i].'" rel="shadowbox[ref]"><img src="galeria/mini/'.$tablica[$i].'" border="0"></a></td>';
  35. $wiersz = $wiersz + 1;
  36. if($wiersz % 4 == 0) { echo '</tr><tr>'; }
  37. }
  38. echo '</tr></table></div>';
  39. }
  40. //paginacja
  41. $ilosc_stron = count($tablica)/8;
  42. $ilosc_stron = ceil($ilosc_stron);
  43. if($ilosc_stron>1) {
  44. echo '<div style="width: 100%; float: left;"><ul class="paginacja">';
  45. for($i=1; $i<=$ilosc_stron; $i++) {
  46. if($strt==$i) { $zaz = ' class="p_on"'; } else { $zaz = ''; }
  47. if($i==1) {
  48. echo '<li'.$zaz.'><a href="'.$url.$_SESSION['lang'].'/'.$_GET['s'].'.html">'.$i.'</a></li>';
  49. } else {
  50. echo '<li'.$zaz.'><a href="'.$url.$_SESSION['lang'].'/'.$_GET['s'].','.$i.'.html">'.$i.'</a></li>';
  51. }
  52. }
  53. echo '</ul></div>';
  54. }
  55. ?>


Dzięki i pozdrawiam
nospor
Sortowanie masz wykonać po stworzeniu całej tablicy a nie w trakcie. Teraz jesli masz powiedzmy 100 zdjec, to 100 razy sortujesz tablice - bez sensu. Sortowanie masz zrobic raz, gdy masz już wszystko w tablicy
Bedrez
W tym miejscu tworzy się tablica, która wczytuje zdjęcia z galerii na podstawie nazwy, usuwa rozszerzenie .jpg lub .png i tworzy listę wartości:

  1. foreach (new DirectoryIterator('galeria/mini/') as $fileInfo) {
  2. $e = $fileInfo->getFilename();
  3. $rozszezenie = array_pop(explode(".", $e));
  4. if( ($rozszezenie=='jpg') || ($rozszezenie=='png') ) {
  5. $z = $z + 1;
  6. $tablica[$z] = $e;
  7. while (list($key, $val) = each($tablica)) {
  8. }
  9. }
  10. }


Doszedłem co oznacza większość formuł php w tym kodzie ale dalej nie potrafie zrozumieć, gdzie powinno się sortować tablicę i dla czego w tym jednym miejscu działa a w innych nie.

Mógłbyś bardziej mnie nakierować...
nospor
Tak, kod co pokazałeś tworzy właśnie tablicę. I tę tablicę masz posortować dokładnie za tym kodem.
Bedrez
Zrobiłem tak:

  1. $tablica = array();
  2. $z = 0;
  3.  
  4. foreach (new DirectoryIterator('galeria/mini/') as $fileInfo) {
  5. $e = $fileInfo->getFilename();
  6. $rozszezenie = array_pop(explode(".", $e));
  7. if( ($rozszezenie=='jpg') || ($rozszezenie=='png') ) {
  8. $z = $z + 1;
  9. $tablica[$z] = $e;
  10. while (list($key, $val) = each($tablica)) {
  11. }
  12. }
  13. }
  14.  
  15. sort ($tablica);


sortuje alfabetycznie czyli od 01(nazewnictwo plików jpg) w górę z tym, że nie wczytuje ani pierwszego 01 ani ostatniego 27 zdjęcia
nospor
A jak wywalisz sort, to masz te dwa zdjęcia? Jakoś mi się nie chce wierzyć.

zrób tak:
  1. $tablica = array();
  2.  
  3. $z = 0;
  4.  
  5.  
  6.  
  7. foreach (new DirectoryIterator('galeria/mini/') as $fileInfo) {
  8.  
  9. $e = $fileInfo->getFilename();
  10.  
  11. $rozszezenie = array_pop(explode(".", $e));
  12.  
  13. if( ($rozszezenie=='jpg') || ($rozszezenie=='png') ) {
  14.  
  15. $z = $z + 1;
  16.  
  17. $tablica[$z] = $e;
  18.  
  19. while (list($key, $val) = each($tablica)) {
  20.  
  21. }
  22.  
  23. }
  24.  
  25. }
  26.  
  27.  
  28. print_r($tablica);
  29. sort ($tablica);
  30. print_r($tablica);

I pokaz co zwraca

I wywal to:
while (list($key, $val) = each($tablica)) {

}
po grzyba to w ogole tam jest?
Bedrez
Otrzymałem:

Array ( [1] => 00.jpg [2] => 01.jpg [3] => 02.jpg [4] => 03.jpg [5] => 04.jpg [6] => 05.jpg [7] => 06.jpg [8] => 07.jpg [9] => 08.jpg [10] => 09.jpg [11] => 10.jpg [12] => 11.jpg [13] => 12.jpg [14] => 13.jpg [15] => 14.jpg [16] => 15.jpg [17] => 16.jpg [18] => 17.jpg [19] => 18.jpg [20] => 19.jpg [21] => 20.jpg [22] => 21.jpg [23] => 22.jpg [24] => 23.jpg [25] => 24.jpg [26] => 25.jpg [27] => 26.jpg [28] => 27.jpg ) Array ( [0] => 00.jpg [1] => 01.jpg [2] => 02.jpg [3] => 03.jpg [4] => 04.jpg [5] => 05.jpg [6] => 06.jpg [7] => 07.jpg [8] => 08.jpg [9] => 09.jpg [10] => 10.jpg [11] => 11.jpg [12] => 12.jpg [13] => 13.jpg [14] => 14.jpg [15] => 15.jpg [16] => 16.jpg [17] => 17.jpg [18] => 18.jpg [19] => 19.jpg [20] => 20.jpg [21] => 21.jpg [22] => 22.jpg [23] => 23.jpg [24] => 24.jpg [25] => 25.jpg [26] => 26.jpg [27] => 27.jpg )

nospor
No to widać wyraźnie, że masz zarówno 01 jak i 27.... czemu mówisz ze nie masz?

Masz błąd później, gdzie wyświetlasz zdjęcia. Przyjąłeś wyświetlanie od indeksu 1, podczas gdy po sortowaniu najmniejszy index to 0
Bedrez
W tym sęk, że zdjęcie 00 się nie wyświetla dla tego tymczasowo skopiowałem 01 i zmieniłem mu nazwę na 00. Zdjęcie 27 już się wyświetla z tym, że pod zdjęciem w mozilli widać mały prostokącik (coś jakby puste zdjęcie) natomiast w ie wyraźnie widać, że jest kwadrat z x w środku czyli brak zdjęcia.
nospor
Przeczytaj jeszcze raz mój ostatni post smile.gif
Bedrez
Masz całkowitą rację. Posprawdzam kod, myślę że na tym etapie już dam sobie radę ale bardzo Ci dziękuję za pomoc.

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.