Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Stronicowanie ...Pilna pomoc potrzebna w błahej sprawie
--MaciekD--
post
Post #1





Goście







Kod ponizej to chyba najpopularniejszy w internecie skrypt stronicowania.

  1. <?php
  2. define('ILOSC_WYNIKOW_NA_STRONIE', 5);
  3.  
  4.  
  5. $SQL = "SELECT SQL_CALC_FOUND_ROWS *
  6. FROM moja_baza
  7. ORDER BY date ASC
  8. LIMIT ".mysql_escape_string((int)$_GET['porcja']*ILOSC_WYNIKOW_NA_STRONIE).",".ILOSC_WYNIKOW_NA_STRONIE;
  9. // pobiera ILOSC_NA_STRONIE rekordów z bazy, sortując wg daty rosnąco, zaczynając od $_GET['porcja']*ILOSC_NA_STRONIE
  10. $RES = mysql_query($SQL); // wykonujemy zapytanie
  11. while($AFR = mysql_fetch_assoc($RES)){
  12. /*Wyświetlanie wyników, przykładowo:*/
  13. echo 'tytuł: '.$AFR['Title'].'<br />';
  14. }
  15.  
  16. // w inny sposób pobieramy ilosc danych w bazie
  17. $SQL = "SELECT FOUND_ROWS() as Ilosc";
  18. $RES= mysql_query($SQL);
  19. list($iloscWpisow) = mysql_fetch_row($RES);
  20.  
  21. //Teraz wypadało by wyświetlić jakąś nawigację
  22.  
  23. //jeśli nie jesteśmy na pierwszej stronie
  24. if($_GET['porcja']>0){
  25. //wyswietlamy link do poprzedniej strony
  26. echo '<a href="?porcja='.($_GET['porcja']-1).'">Poprzednie</a> ';
  27. }
  28.  
  29. for($i = 0;$i<=floor($iloscWpisow/ILOSC_WYNIKOW_NA_STRONIE);$i++){
  30. echo '<a href="?porcja='.($i).'">[ '.($i+1).' ]</a> ';
  31. }
  32. //jeśli nie jesteśmy na ostatniej stronie
  33. if($_GET['porcja']<floor($iloscWpisow/ILOSC_WYNIKOW_NA_STRONIE)){
  34. //wyświetlamy link do nastepnej strony
  35. echo ' <a href="?porcja='.($_GET['porcja']+1).'">następne</a>';
  36. }
  37. ?>


Jego efekt jest mniejwiecej taki:

poprzednie [1][2][3][4][5]6][7][8][9][10][11][12][13][14][15] nastepne.

Pytanie: Co wprowadzic w tym skrypcie zeby wyswietlał cos takiego:

poprzednie [1][2][3]...[9][10][11].....[17][18][19] nastepne. gdzie 10 to strona aktywna
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
thek
post
Post #2





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Zastanowić się nad logiką pętli for. Musisz koniecznie się iterować przez wszystkie kroki? (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
--MaciekD--
post
Post #3





Goście







Nie chodzi o to żeby ktoś napisał ten skrypt tylko podpowiedział jak to zrobić, ile petli albo cos bo szukam na necie, ale żeby mi coś pasowało do tego skryptu to ciezko znaleźć.
Go to the top of the page
+Quote Post
thek
post
Post #4





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Ech... Popatrz JAK wglądać ma to co chcesz...
1,2,3 (...) aktualna-1, aktualna, aktualna+1 (...) n-2,n-1, n
z wariantami gdzie aktualna może być zarówno od 1 do 3 jak i od n-2 do n (IMG:style_emoticons/default/wink.gif) Popatrz jak się zmienia wygląd paginacji w zależności od ilości stron oraz aktualnej, to nawet pętle nie będą Ci potrzebne.
Go to the top of the page
+Quote Post
--MaciekD--
post
Post #5





Goście







Poradziłem sobie takim oto sposobem
  1. $pages = $iloscWpisow/ILOSC;
  2.  
  3. for($i = 1; $i<=floor($pages);$i++)
  4. {
  5.  
  6. if($i <= 3 OR $i >= ($pages-3) OR ($_GET['page']+1)==$i OR ($_GET['page']-1)==$i OR ($_GET['page'])==$i OR $i%10==0 OR $i == $pages)
  7. {
  8. if($i==$_GET['page'])
  9. {
  10. echo '<a href="?page='.($i).'" class="active">| '.($i).'|</a> ';
  11.  
  12. }
  13. else
  14. {
  15. echo '<a href="?page='.($i).'">| '.($i).' |</a> ';
  16. }
  17. }
  18. }
  19.  


Co wyswiela mi |1|2|3|9|10|11|18|19|20| czyli jest duzo blizej niz dalej. Jedynie czego mi brakuje to jak poszczegolne te trójki liczb rozdzielic trzykropkiem ...
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.09.2025 - 13:18