Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] stronicowanie galerii
Forum PHP.pl > Forum > PHP
Volume
kombinuje jak tu zrobic by stronicowalo mi pobierane z folderu pliki (obrazki) ale bez tych "kropek" -> ".." i ".", ktore w tablicach segraguje jako $tab[0] i $tab[1] wiec uzylem funkcji:
  1. $dirs = array_diff( scandir( $dir ), Array( ".", ".." ) );
no i niby sie pozbylem tego ale ciagle przy petli for przy wczytywaniu i stronicowaniu tych plikow wylapuje mi gdzies te dwie pominiete tablice i jak dam przykladowo ze chce miec na stronie 5 zdjec - to na pierwszej stronie dostaje 3, jak dam 4 to 2 itd. ciagle odejmuje mi te 2 wyniki (tylko na 1 stronie).
Caly kod wyglada tak:

  1. <?php
  2. $dir = 'obrazki/';
  3.  
  4. $dirs = array_diff( scandir( $dir ), Array( ".", ".." ) );
  5.  
  6. $countall=count($dirs);
  7. $images_on_page = 5;
  8. $offset;
  9. if (isset($_GET['offset']))
  10. {
  11. $offset = $_GET['offset']-1;
  12. }
  13. else
  14. {
  15. $offset = 0;
  16. }
  17.  
  18.  
  19.  
  20. for ($i = $offset*$images_on_page; $i < $images_on_page+($offset*$images_on_page); $i++)
  21. {
  22. echo '<p>'.$dirs[$i].'</p>';
  23. }
  24.  
  25. if ($countall > $images_on_page)
  26. {
  27. echo '<br />';
  28. for ($i=1; $i <=ceil(($countall)/$images_on_page); $i++ )
  29. {
  30. echo '<a href="'.$_SERVER[PHP_SELF].'?offset='.$i.'">'.$i.'</a> ';
  31. }
  32. }
  33. ?>

Bardzo prosze o jakas pomoc...
cojack
Zrób sobie print_r na $dirs i zobaczysz dlaczego jest tak a nie inaczej, przykład u mnie:

Kod
cojack@cojack-laptop:~$ php -r'$dirs = array_diff( scandir( "/tmp" ), Array( ".", ".." ) ); print_r($dirs);'
Array
(
    [2] => .ICE-unix
    [3] => .X0-lock
    [4] => .X11-unix
    [5] => eclipse
    [6] => gpg-Q2yRol
    [7] => hsperfdata_cojack
    [8] => jna2033852832555629755.tmp
    [9] => kde-cojack
    [10] => kde-root
    [11] => ksocket-cojack
    [12] => orbit-cojack
    [13] => pulse-avuaOb9vyJcX
    [14] => ssh-osjLnd2755
)


nie mam . ani ..
Volume
No wlasnie, u mnie to wyglada tak:
Cytat
Array ( [2] => 01.png [3] => 02.png [4] => 03.png [5] => 04.png [6] => 05.png [7] => 06.png [8] => 07.png [9] => 08.png [10] => 09.png [11] => 10.png [12] => 11.png [13] => 12.png [14] => 13.png [15] => 14.png ) 1

ale jak widzisz zliczanie zaczyna sie od [2], rozwiazaniem mojego problemu moze byc odp na pytanie jak zrobic by zliczanie zaczynalo sie od [0] czyli w Twoim przypadku zeby to wygladalo tak:

  1. cojack@cojack-laptop:~$ php -r'$dirs = array_diff( scandir( "/tmp" ), Array( ".", ".." ) ); print_r($dirs);'
  2. (
  3. [0] => .ICE-unix
  4. [2] => .X0-lock
  5. [3] => .X11-unix
  6. (...)
Do mojego kodu zmienna w petli wyciaga wartosci z tablicy [$i] - wiec przy zliczaniu od 0 powinno byc ok..
cojack
To sobie przenumeruj.
Volume
A jakas podpowiedz jak to zrobic? Bo ciagle cos z tym probuje zrobic i wlasnie to nie wychodzi
piotr94
a choćby w najprostszy z możliwych sposobów:
Kod
foreach($dirs as $key=>$val){
$dirs_od_zera[]=$val;
}

oczywiście przy dłuższych tablicach Ci się może zacinać skrypt, ale poszukaj sobie na pl.php.net czegoś lepszego ;-)
Volume
super dzieki wam!
mad/
Mam troszkę wydajniejszy chyba pomysł, po prostu w momencie tablicowania nazwy plików od razu dodać opcję niedodawania '.' i '..', albo filtr wyłapujący foldery, np tak:
$dir = opendir('/home/web/pub/content/dir/galeria/);
$tmp = array();
while($tmp['d'] = readdir($dir))
{
if(isfile($tmp['d']))
{
//tu kod dodawania do tablicy.
}
}

btw. polecam zmianę '<br />' na '<br/>', to pierwsze jest nieporawidłowe, jeśli to ma być xhtml, to Conjent-Type musi być application/.xhtml+xml;charset="<wstaw swoj charset>", a 'ref="'.$_SERVER[PHP_SELF].'?of' powinno mieć apostrofy na PHP_SELF: 'ref="'.$_SERVER['PHP_SELF'].'?of'
cojack
Sory kolego ale mylisz się w obu przypadkach.

Ma być <br /> a nie <br/> - dokumentacja nie boli go go go!

I ma być $_SERVER['SCRIPT_NAME'] a nie $_SERVER['PHP_SELF'] - zabezpieczenie przed atakami typu xss
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.