Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] mechanizm NEXT | PREVIOUS?
Forum PHP.pl > Forum > Przedszkole
jagon
Witam, od dłuższego czasu próbuję stworzyć mechanizm, którego zadaniem będzie przeglądanie fotek. Najprościej mówiąc: po kliknięciu w NEXT, skrypt otwiera nam następna fotkę itd. chciałbym też, aby zawierał opcję PREVIOUS.

Najważniejsze jest jednak to, że na stronie będzie wiele galerii, dzięki czemu mechanizm musi być uniwersalny.

Ma ktoś jakiś pomysłsmile.gif?
isso
Mechanizm powiadasz.... a nie lepiej wypisać wszystkie fotki z katalogu/bazy i przegladac je poprzez lightbox`a?

Ja ogólnie do operowania zdjęciami użyłbym tablicy... na tablicach właśnie można wykonywać next i previous smile.gif

powodzenia
Kihol
Najlepiej napisz sobie jakąś funkcję, która jako parametry będzie przyjmowała np id galerii i id aktualnego zdjęcia. Przy pomocy tych dwóch informacji tworzysz zapytanie, które wyszukuje poprzednie i następne zdjęcie w danej galerii, np:
  1. <?php
  2. function getNextPrev($galleryId, $photoId) {
  3. $query = "SELECT num FROM photos WHERE galleryId = $galleryId AND id=$photoId";  //wyciągamy num - czyli aktualną pozycję zdjęcia (zakładam, że zdjęcia są układane według pola num)
  4. $photo = mysql_fetch_row($query);
  5. $num = $photo[0]; // mamy num aktualnego zdjęcia
  6. $query2 = "SELECT id FROM photos WHERE num>$num LIMIT 1"; // tu mamy następne zdjęcie
  7. $query3 = "SELECT id FROM photos WHERE num<$num LIMIT 1"; // a tu poprzednie
  8. $nextPhoto = mysql_fetch_row($query2);
  9. $nextPhotoId = $nextPhoto[0];
  10. $prevPhoto = mysql_fetch_row($query3);
  11. $prevPhotoId = $prevPhoto[0];
  12. return array($prevPhotoId, $nextPhotoId);   //zwrócona zostaje tablica z identyfikatorem poprzedniego i następnego zdjęcia
  13. }
  14.  
  15. // i używasz tego gdzieś w skrypcie :
  16. $photos = getNextPrev($galleryId, $id);
  17. echo '<a href="jakis_site/photos.php?id='.$photos[0].'">poprzednie</a> | <a href="jakis_site/photos.php?id='.$photos[1].'">następne</a>';
  18. ?>
slewin
Ja mam u siebie prosty i nie zawodny mechanizm
  1. <?php
  2. echo '<a href="galeria.php?nr='.($_GET['nr']-1).'" align="left">Poprzednia strona</a>
  3.        <a href="galeria.php?nr='.($_GET['nr']+1).'" align="right">Następna strona</a>';
  4. ?>


a jesli miał byś dużo galerii ( mądrze by było trzymać zdjecia w bazie danych) to wtedy masz proste rozwiazanie :

budujesz baze gdzie beda kategorie i zjęcia nastepnie piszesz skrypt łaczący się z baza wybierajacy odpowiedna kategorie ,galerie,zdjecie i dodajesz do ostetniej strony kod typu:
  1. <?php
  2. echo '<a href="galeria.php?kat='.$row['kat'].'&nr='.($row['nr']-1).'" align="left">Poprzednia strona</a>
  3.          <a href="galeria.php?kat='.$row['kat'].'&nr='.($row['nr']+1).'" align="right">Następna strona</a>';
  4. ?>


a żeby przegladać tylko kategorie :

  1. <?php
  2. echo '<a href="galeria.php?kat='.($row['kat']-1).'" align="left">Poprzednia strona</a>
  3.            <a href="galeria.php?kat='.($row['kat']+1).'" align="right">Następna strona</a>';
  4. ?>


możesz to dowolnie modyfikowac , zależy jak piszesz ten skrypt galerii . może Ci się to przyda
pozdro
Kihol
slewin, Twój skrypt niestety ma jedną dużą wadę. Jeśli z bazy zostanie usunięty jakiś rekord, to $row['nr']-1, $row['nr']+1 może przestać działać, bo nie będzie rekordu z danym id, czy po czym tam sobie to sprawdzasz..
isso
to tak jak napisałem... użyj katalogów do odzielania kontentu.. później wczytuj do tablicy i przeglądaj smile.gif za pomocą next(); prev().... poszukaj troche o tym smile.gif to prosta sprawa smile.gif
slewin
wiem o tym , to jest duży problem . Można go rozwiązać . Właśnie nad tym myślę i mam już kikla pomysłów , przetestuje to dam znac .
Kihol
Możesz wykorzystać fragment tego co zamieściłem wyżej, albo jak napisał isso. Czyli wrzucić wszystko do tablicy (tylko że tablice wtedy trzeba przekazywać np. przez sesję) i poprzez next(), prev() wybierać odpowiednie dane z tablicy.
jagon
Dzieki, tylko nie umiem korzystać z tablic, nie bez znaczenia napisałem temat w dziale przedszkole:) cóż poszperam jeszcze...
slewin
Zamiast następna poprzednia ten kawałek kodu wypisze tylko te zdjecia które istnieją biggrin.gif ( coś takiego chyba też moze być )
  1. <?php
  2. $wynik = mysql_query ("SELECT * FROM zdjecia ORDER BY nr");
  3.  $i = 1;
  4.  while ($wynik && $rekord = mysql_fetch_assoc ($wynik)) {
  5.     $nazwa[$i] = $rekord['nr'];
  6.    $i++;
  7.  }
  8.    // listing
  9.    print "<H3>Lista zdjec:</H3>";
  10.    for ($i=1; $i<=count($nazwa); $i++) {
  11. print "<A HREF=galeria.php?nr=".$nazwa[$i].">".$nazwa[$i]."</A>\n";
  12.    }
  13. ?>




i co wy na to questionmark.gif
jagon
A prosiłem...bez bazy:) Jest ktoś w stanie pomóc mi w rozwiązaniu? same hasła nic mi nie mówią niestety, jestem na etapie IFowania...
slewin
Oto prosty skrypt galerii
tworzysz sobie katalogi na serwerze galeria
nastepnie katalog zdjecia , w kat. zdjecia wrzucasz miniaturki fotografii oraz tworzysz katalog duze , a tam wrzucasz fotki w w orginalnym formacie lub jakim tam chcesz .
Ten kod jest z książki PHP5 - przykłady praktyczne .
Uważam że bardzo dobra galeria na stronke jeśli nie masz dużo zdjec .
plik galeria.php
  1. <? // Skrypt do realizacji prostej galerii.
  2.  
  3.    // odczyt zawartości katalogu
  4.    $katalog = opendir ('zdjecia'); // to katalog gdzie terzymasz zdjecia
  5.    $i=1;
  6.    while ($plik = readdir ($katalog)) {
  7.      if (ereg (".gif$|.jpg$", $plik)) { $zdjecia[$i++] = $plik; }
  8.    }
  9.    closedir ($katalog);
  10.  
  11.    if (($_GET['nr']>0) && ($_GET['nr']<=count($zdjecia))) {
  12.      print "<P ALIGN=CENTER>";
  13.      if ($_GET['nr']>1) {
  14.        print '<A HREF="galeria.php?nr='.($_GET['nr']-1);
  15.        print '">Poprzednie</A>&nbsp;&nbsp;&nbsp;';
  16.      }
  17.      print '<A HREF="galeria.php">Galeria</A>&nbsp;&nbsp;&nbsp;';
  18.      if ($_GET['nr']<count($zdjecia)) {
  19.        print '<A HREF="galeria.php?nr='.($_GET['nr']+1).'">Następny</A>';
  20.      }
  21.      print "</P><P ALIGN=CENTER>";
  22.      $nazwapliku = './zdjecia/duze/'.$zdjecia[$_GET['nr']]; // duze zdjecia , pelen wymiar
  23.      if (file_exists($nazwapliku)) {
  24.        $rozmiar = getimagesize($nazwapliku);
  25.        print '<IMG SRC='.$nazwapliku.' '.$rozmiar[3];
  26.        print '></P>';
  27.      } else {
  28.        print "Brak dużego zdjęcia</P>";
  29.      }
  30.  
  31.    } elseif (count($zdjecia)>0) {    // jest przynajmniej jedno zdjęcie
  32.      print "<H2>Galeria zdjęć</H2><P ALIGN=CENTER>";
  33.      for ($i=1; $i<=count($zdjecia); $i++) {
  34.        $nazwapliku = './zdjecia/'.$zdjecia[$i];  // miniaturki
  35.        $rozmiar = getimagesize($nazwapliku);
  36.        print "<A HREF=\"galeria.php?nr=$i\">";
  37.        print "<IMG SRC=\"$nazwapliku\" ".$rozmiar[3];
  38.        print "BORDER=0 HSPACE=10 VSPACE=10 ALIGN=absmiddle></A>";
  39.      }
  40.      print "</P>";
  41.    } else { // w katalogu nie ma zdjęć
  42.      print "Katalog jest pusty!";
  43.    }
  44.  ?>
jagon
Dzięki bardzo! właśnie o taki prosty skrypcik mi chodziło. Teraz tylko zmodyfikuję go wg moich potrzeb i będzie super.
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.