Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Wyświetlanie zdjęć według kolejności modyfikacji - PHP
Forum PHP.pl > Forum > Przedszkole
arekko
Witam, mam taki plik PHP, który pobiera mniaturki z folderu i tworzy galerie. Chciałbym go edytować tak żeby wyświetlał zdjęcia w kolejności ostatniej modyfikacji. Co musze w nim zmienić?

<html>
<head>
<link rel="stylesheet" href="img/style.css" type="text/css" />
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<script type="text/javascript" src="img/mlbox.js"></script>
<title>Galeria zdjęć - plener</title>
</head>
<body>
<a href="../galeria.html">Wróć</a>
<div align="center" id="galeria";>
<ul>

<?php
$katalog = "obrazki";
$katalogminiaturki = "miniaturki";
$galeria = opendir( $katalog );
while ( $zdjecie = readdir( $galeria ) ){
$odczyt = pathinfo( $katalog.'/'.$zdjecie );
if ( $odczyt['extension'] == 'jpg' ){
echo '<li>
<a rel="mlbox[test]" href="'.$katalog.'/'.$zdjecie.'" rel="mlbox" >
<img src="'.$katalogminiaturki.'/'.$zdjecie.'" alt="ZdjÍcie: '.$zdjecie.'" /></a></li>';
}
}
closedir($galeria);

?>


</ul>
</div>
</body>
</html>

Ktoś pomoże?
Daimos
Musisz w pętli sprawdzić datę modyfikacji każdego pliku. Pierwsze lepsze rozwiązanie ze stackoverflow:
  1. function scan_dir($dir) {
  2. $ignored = array('.', '..', '.svn', '.htaccess');
  3.  
  4. $files = array();
  5. foreach (scandir($dir) as $file) {
  6. if (in_array($file, $ignored)) continue;
  7. $files[$file] = filemtime($dir . '/' . $file);
  8. }
  9.  
  10. arsort($files);
  11. $files = array_keys($files);
  12.  
  13. return ($files) ? $files : false;
  14. }
arekko
Mógłbyś dokładniej powiedzieć mi jak mam to zastosować? smile.gif
Daimos
Nie wiesz jak funkcje wywoływać? Oj, chyba trzeba zacząć od podstaw
  1. $nazwaFolderu = '/moj-folder-z-plikami/';
  2. $pliki = scan_dir($nazwaFolderu);
  3. // teraz pod zmienną $pliki masz tablicę z plikami, posortowanymi według daty modyfikacji, jak chciałeś
  4. // przykład wyświetlenia:
  5. var_dump($pliki);

Żeby wyświetlić ładnie te pliki, wystarczy, że skorzystasz z dowolnej pętli, najłatwiej foreach i celowo nie napisałem Ci całości, żebyś trochę ruszył głową, to dział do pomagania, nie do odwalania roboty wink.gif
arekko
Zrobiłem coś takiego, zdjęcia się wyświetlają z datą modyfikacji i nazwą jednak nie są posortowane według kolejności. Wyskakuje mi też coś takiego:

Warning: filemtime() [function.filemtime]: stat failed for 2.png in /home/u181711956/public_html/test/test.php on line 33

A 33 linia to: $zdjecia[filemtime($zdjecie)] = $zdjecia;

A to kod:
  1. <?php
  2. $katalog = "obrazki";
  3. $katalogminiaturki = "miniaturki";
  4. $galeria = opendir( $katalog );
  5.  
  6. while ( false !== ( $zdjecie = readdir( $galeria ) ))
  7. {
  8. $odczyt = pathinfo( $katalog.'/'.$zdjecie );
  9.  
  10. if ($zdjecie != '.' && $zdjecie != '..')
  11. {
  12.  
  13. {
  14. $zdjecia[filemtime($zdjecie)] = $zdjecia;
  15. }
  16. }
  17.  
  18. krsort($zdjecia);
  19. foreach ($zdjecia as $filetime => $filename )
  20.  
  21. {
  22. echo date('F d Y, H:i:s', $filetime) . '-' . $filename . '
  23. <a rel="mlbox[test]" href="'.$katalog.'/'.$zdjecie.'" rel="mlbox" >
  24. <img src="'.$katalogminiaturki.'/'.$zdjecie.'" alt="ZdjÍcie: '.$zdjecie.'" /></a>';
  25.  
  26.  
  27. }
  28. }
  29.  
  30.  
  31. ?>


Gdzie tu jest problem?

Zrobiłem już coś takiego:

  1. <?php
  2. $katalog = "../admin/dodaj/krajobraz/obrazki";
  3. $katalogminiaturki = "../admin/dodaj/krajobraz/miniaturki";
  4. $galeria = opendir( $katalog );
  5.  
  6. while ( false !== ( $zdjecie = readdir( $galeria ) ))
  7. {
  8. $odczyt = pathinfo( $katalog.'/'.$zdjecie );
  9.  
  10. if ($zdjecie != '.' && $zdjecie != '..')
  11. {
  12.  
  13. {
  14. $zdjecia[filemtime($katalog)] = $zdjecia;
  15. }
  16. }
  17.  
  18. krsort($zdjecia);
  19. foreach ($zdjecia as $filetime => $filename )
  20.  
  21. {
  22. echo date('F d Y, H:i:s', $filetime) . '-' . $filename . '
  23. <a rel="mlbox[test]" href="'.$katalog.'/'.$zdjecie.'" rel="mlbox" >
  24. <img src="'.$katalogminiaturki.'/'.$zdjecie.'" alt="ZdjÍcie: '.$zdjecie.'" /></a>';
  25.  
  26.  
  27. }
  28. }
  29.  
  30.  
  31. ?>


Jednak zdjęcia dalej się nie sortują według daty. Obok każdego zdjęcia wyskakuje taka sama informacja o kodzie: "January 24 2015, 16:30:28-Array"
trueblue
1. Nadal przekazujesz nie taki jak być powinien argument, do filemtime.
2. Nadal przypisujesz do elementu tablicy całą, samą siebie.
3. Argument, który przekazujesz do filemtime mógłbyś użyć jako źródło <img> (gdyby był poprawny).
arekko
Zmodyfikowałem lekko kod:

  1. <?php
  2. $katalog = "obrazki";
  3. $katalogminiaturki = "miniaturki";
  4. $galeria = opendir( $katalog );
  5.  
  6. while ( false !== ( $zdjecie = readdir( $galeria ) ))
  7. {
  8. $odczyt = pathinfo( $katalog.'/'.$zdjecie );
  9.  
  10. if ($zdjecie != '.' && $zdjecie != '..')
  11. {
  12.  
  13. {
  14. $tablica[filemtime($katalog)] = $zdjecie;
  15. }
  16. }
  17.  
  18. krsort($tablica);
  19. foreach ($tablica as $filetime => $filename )
  20.  
  21. {
  22. echo date('F d Y, H:i:s', $filetime) . '.' . $filename . '
  23. <a rel="mlbox[test]" href="'.$katalog.'/'.$zdjecie.'" rel="mlbox" >
  24. <img src="'.$katalogminiaturki.'/'.$zdjecie.'" alt="ZdjÍcie: '.$zdjecie.'" /></a>';
  25.  
  26.  
  27. }
  28. }
  29.  
  30.  
  31. ?>


W tej chwili wyświetlają mi się już nazwy poszczególnych zdjęć, jednak daty modyfikacji wszędzie są takie same..
trueblue
1. Kup okulary.
2. Kiedy zakupisz okulary, to sprawdź co napisałem w poście wyżej, w punkcie 1.
arekko
Wiem że zły argument ale nie wiem jaki .. próbowałem już każdego chyba ..

Edytowany:
Już mam! $katalog.'/'.$zdjecie
Daty są ok teraz

Tylko że powstał kolejny problem. Każde zdjęcie wyświetla się po dwa-trzy razy..
nospor
pytaz o to samo w kilku tematach....
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.