Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Mała edycja stronicowania (paginacji)
Forum PHP.pl > Forum > Przedszkole
Gray
Witam, znalazłem w internecie kod stronicowania, w oparciu o niego chciał bym się dowiedzieć, jak zrobić aby na pierwszej stronie wyświetlała się inna ilość obiektów niż na pozostałych. Dajmy na to na pierwszej 50 obiektów, na pozostałych stronach 15 obiektów.

Oto kod:
  1. $perPage = 20;
  2. if (is_numeric($_REQUEST['page'])) {
  3. $page = (int) $_REQUEST['page'];
  4. if ($page < 1) {
  5. $page = 1;
  6. }
  7. } else {
  8. $page = 1;
  9. }
  10. $start = ($page - 1) * $perPage;
  11. $query = 'SELECT [fields] FROM [table] ' .
  12. "WHERE [condition] LIMIT $start, $perPage";
  13. $result = mysql_query($query);
  14. while ($record = mysql_fetch_srray($result)) {
  15. // wyswietlanie wpisow
  16. }
  17. $prev = $page - 1;
  18. $next = $page + 1;
  19. $prevLink = $_SERVER['PHP_SELF'] . '?page=' . $prev;
  20. $nextLink = $_SERVER['PHP_SELF'] . '?page=' . $next;
  21. echo "<p align='center'>",
  22. "<a href='$prevLink'>";
  23. "Previous Page</a> | ",
  24. "<a href='$nextLink'>",
  25. "Next Page</a></p>";


Pozdrawiam i z góry dziękuję za pomoc.
Bateria
Łap:
http://jakub-cieslak.pl/phpmysql-paginacja...wanie/
Tylko dodaj przed tym:
  1. $query = mysql_query("SELECT * FROM str LIMIT $odkad, $wynikow");

To
  1. if($page == 1){
  2. $wynikow = 30; // ilosc wynikow na pierwszej stronie
  3. }
Gray
Hmm wstępnie dzięki, musiał bym przeanalizować ten kod który mi podałeś... jednak liczyłem na porady co do podanego przeze mnie skryptu.
peter13135
  1. if($page==1)
  2. $perPage = 50;
  3. else
  4. $perPage = 15;


ale... ten skrypt wydaje mi się niepełny, bo nie widzę tutaj czegoś, co by tworzyło linki do strony, czyli
1,2,3,...,n-2,n-1,n
Gray
niepotrzebne mi są strony wystarczy "poprzednia - następna"
Bateria
Co do kodu podanego przez Ciebie, to nie ukrywam iż nie chciało mi się go analizować. Przykład który Ci podałem jest napisany przeze mnie, więc mogłem być pewny że zadziała.
Gray
@Bateria jeszcze nie analizowałem Twojego kodu dokładnie ale wydaje mi się, że to co zaproponowałeś czyli aby przed Twoim kodem dodać:
  1. if($page == 1){
  2. $wynikow = 30; // ilosc wynikow na pierwszej stronie
  3. }


Będzie robiło to samo co dodanie w podanym przeze mnie kodzie tego:
  1. if($page==1)
  2. $perPage = 50;
  3. else
  4. $perPage = 15;


O ile dobrze wszystko przeanalizowałem, to w obu przypadkach jest źle wyświetlana druga strona, błąd polega mniej więcej na tym, że np. na stronie pierwszej mam ustawione wyświetlanie 6 obiektów 1, 2, 3, 4, 5, 6 i kiedy przechodzę na stronę drugą gdzie mam ustawione wyświetlanie 3 obiektów to skrypt wyświetla obiekty 4, 5, 6 zamiast 7, 8, 9

na moje to skrypt na drugiej stronie myśli, że na pierwszej zostały wyświetlone tylko 3 obiekty bo nie wie, że jest tam ustawione 6
Bateria
Też nie problem...
  1. if($page == 1){
  2. $wynikow = 30; // ilosc wynikow na pierwszej stronie
  3. } else {
  4. $odkad = $odkad + 15;
  5. }
Gray
No może i nie problem ale w przypadku który podałeś, to nie będzie błędów na stronach od 3 i dalej? pierwsza pokaże 30, druga od 30 do 45 a trzecia od 60 do 75?
Bateria
W tym przykładzie który Ci podałem, wszystko działa sprawnie, nawet gdy na pierwszej stronie wyświetlasz inną ilość wyników. Sprawdzałem osobiście. Masz tu poprawioną wersję:
http://jakub-cieslak.pl/phpmysql-paginacja-stronicowanie/
Gray
No tak ale jeśli zrobię $odkad = $odkad + 15; to ten kod będzie stosowany na każdej stronie, czyli na 2, 3, 4 ,5 itd. czyli efekty będą niepożądane... do pierwszych 30 doliczy 15 to na drugiej stronie będą od 30 do 45 ale na trzeciej doliczy kolejne 15 i zamiast od 45 do 60 to będzie od 60 do 75

#edit
ok z pierwszych testów chyba wynika, że się myliłem w tym co napisałem powyżej.
Bateria
  1. // jezeli jestes na pierwszej stronie bedzie sie wyswietlac zamiast 15 wynikow 30
  2. if($page == 1){
  3. $wynikow = 30; // ilosc wynikow na pierwszej stronie
  4. } else {
  5. // jezeli nie jestes na pierwszej stronie bedzie wyswiatlac 15 wynikow, tylko ze zaczynac wyswietlanie o 15 pozycji pozniej
  6. $odkad = $odkad + 15;
  7. }

Przecież o to Ci chodziło. Skopiuj kod, i sam się przekonaj że to działa tak jak powinno.
Gray
Działa, dzieki.
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.