Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Stronnicowanie i zgrabne linkowanie, ograniczyć linki
stein
post
Post #1





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 5.10.2006

Ostrzeżenie: (0%)
-----


Witam mam taki skrypt ktory stronnicuje księge gości dziala poprawnie i chcialbym go troche zmodyfikować w zwązku z tym proszę o pomoc, skrypt stronicuje wyswietlane rekordy do 10 po czym tworzy kolejną stronę itd. natomiast na dole tworzy linki do tych kolejnych stron czyli np 1,2,3,4,5,6 i tak bez konca będzie 100 stron to stworzy 100 linkow moje pytanie jak to przerobić tak aby pokazywal tylko 10 linkow i ostatni tak by wyświetlane byly tylko od 1 do 10 lub od 1 do 15 i ostatni oraz link do pierwszego linku, nadmieniam ze w tym skrypcie jest tez link do strony poprzedniej i następnej. Co zmienic w tym skrypcie proszę o pomoc?

  1. <?php
  2. require_once ('../gornik_connect.php');
  3.  
  4. $display = 10;
  5.  
  6. // Wyznacza liczbę stron.
  7. if (isset($_GET['np'])) { // Liczba stron już ustalona.
  8.  
  9. $num_pages = $_GET['np'];
  10.  
  11. } else { // Trzeba ją dopiero określić.
  12.  
  13. // Zlicz rekordy
  14. $query = "SELECT COUNT(*) FROM ksiega ORDER BY data ASC";
  15. $result = mysql_query ($query);
  16. $row = mysql_fetch_array ($result, MYSQL_NUM);
  17. $num_records = $row[0];
  18.  
  19. // Wyznacz liczbę stron.
  20. if ($num_records > $display) { // Więcej niż 1 strona.
  21. $num_pages = ceil ($num_records/$display);
  22. } else {
  23. $num_pages = 1;
  24. }
  25.  
  26. } // Koniec instrukcji warunkowej dla zmiennej np.
  27.  
  28. // Określ punkt początkowy wyników w bazie.
  29. if (isset($_GET['s'])) {
  30. $start = $_GET['s'];
  31. } else {
  32. $start = 0;
  33. }
  34.  
  35. tu pobieram dane z bazy itd. $query = "SELECT * FROM ksiega ORDER BY data DESC LIMIT $start, $display";
  36. a potem
  37.  
  38. if ($num_pages > 1) {
  39.  
  40. echo '<br /><p>';
  41. // Określ bieżącą stronę.
  42. $current_page = ($start/$display) + 1;
  43.  
  44. // Jeśli to nie jest pierwsza strona, utwórz łącze do poprzedniej.
  45. if ($current_page != 1) {
  46. echo '<a href="ksiega.php?s=' . ($start - $display) . '&np=' . $num_pages . '">Poprzednia</a> ';
  47. }
  48.  
  49. // Łącza do pozostałych stron.
  50. for ($i = 1; $i <= $num_pages; $i++) {
  51. if ($i != $current_page) {
  52. echo '<a href="ksiega.php?s=' . (($display * ($i - 1))) . '&np=' . $num_pages . '">' . $i . '</a> ';
  53. } else {
  54. echo $i . ' ';
  55. }
  56. }
  57.  
  58. // Jeśli to nie jest ostatnia strona, utwórz łącze do następnej.
  59. if ($current_page != $num_pages) {
  60. echo '<a href="ksiega.php?s=' . ($start + $display) . '&np=' . $num_pages . '">Następna</a>';
  61. }
  62.  
  63. echo '</p>';
  64.  
  65. } // Koniec sekcji łącz.
  66. ?>


Miało być, żeby wyświetlało linki od 1 do 10 lub od 5 do 15 czy tez od 30 do 40 itd.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
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




  1. function pagination( $actual, $all, $path = '?page=', $suff='', $per_page = 10, $width = 3 ) {
  2. $code = '';
  3. if( $path === null ) {
  4. $path = '?page=';
  5. }
  6. if( $suff === null ) {
  7. $suff = '';
  8. }
  9. $pages = ceil( $all/$per_page );
  10. if( $pages > 1 ) {
  11. $code .= '<div id="pagination"><ul>';
  12. if( $actual > 1 ) {
  13. $code .= '<li class="pgn1st"><a id="paginfirst" href="'.$path.'1'.$suff.'"><span>Pierwsza</span></a></li><li class="pgnprev"><a id="paginprev" href="'.$path.($actual-1).$suff.'"><span>Poprzednia</span></a></li>';
  14. } else {
  15. $code .= '<li class="pgn1st"><a id="paginfirstnone" href="'.$path.'1'.$suff.'"><span>Pierwsza</span></a></li><li class="pgnprev"><a id="paginprevnone" href="'.$path.'1'.$suff.'"><span>Poprzednia</span></a></li>';
  16. }
  17. for( $i=$actual-$width; $i<=$actual+$width; $i++ ) {
  18. if( $i<1 ) {
  19. continue;
  20. } elseif( $i>$pages ) {
  21. break;
  22. } elseif( $i == $actual ) {
  23. $code .= '<li class="num"><a class="active" href="">'.$i.'</a></li>';
  24. } else
  25. $code .= '<li class="num"><a href="'.$path.$i.$suff.'">'.$i.'</a></li>';
  26. }
  27. if( $actual < $pages ) {
  28. $code .= '<li class="pgnnext"><a id="paginnext" href="'.$path.($actual+1).$suff.'"><span>Następna</span></a></li><li class="pgnlast"><a id="paginlast" href="'.$path.$pages.$suff.'"><span>Ostatnia</span></a></li>';
  29. } else {
  30. $code .= '<li class="pgnnext"><a id="paginnextnone" href="'.$path.$pages.$suff.'"><span>Następna</span></a></li><li class="pgnlast"><a id="paginlastnone" href="'.$path.$pages.$suff.'"><span>Ostatnia</span></a></li>';
  31. }
  32. $code .= '</ul></div>';
  33. }
  34. return $code;
  35. };
To "coś" generuje cały kod paginacji. Co za parametry?
$actual - obecna strona,
$all - wszystkie rekordy,
$path - to co w linku przed numerem strony,
$suffix - to co za numerem strony
$per_page -ilość rekordów na stronie,
$width - ilość podstron w lewo i w prawo w odniesieniu do obecnej.
$path i $suffix przydają się podczas tworzenia linków SEO-friendly. Jedyne czym można niby wzbogacić (ale można to sprawdzać jeszcze przed wywołaniem funkcji i ja tak robię) to czy ktoś nie wyskoczył w $actual z numerem strony poniżej pierwszej albo powyżej ostatniej i wtedy na pałę wpisać albo pierwszą albo ostatnią.

Jedynie musisz zadbać o definicję w CSS paru id i klas by ładnie wyglądało. Przykładowo:
  1. div#pagination {width:230px; margin:0 auto; padding-top:20px;}
  2. div#pagination ul { list-style-type:none;}
  3. div#pagination li {float:left; display:block;}
  4. div#pagination span {display:none}
  5. div#pagination li.num {margin-left:3px;}
  6. div#pagination li.pgn1st {margin-right:1px;}
  7. div#pagination li.pgnprev {margin-right:5px;}
  8. div#pagination li.pgnnext {margin-left:8px;}
  9. div#pagination li.pgnlast {margin-left:1px;}
  10. div#pagination a {width:16px; height:16px; text-decoration:none; background:url(pagin/paginnum.gif) no-repeat; font:bold 9px/15px Verdana, sans-serif; color:#fefefe; text-align:center; float:left; display:block;}
  11. div#pagination a.active {background:url(pagin/paginsctive.gif) no-repeat;}
  12. div#pagination a#paginfirst {background:url(pagin/pagin1st.gif) no-repeat;}
  13. div#pagination a#paginfirstnone {background:url(pagin/pagin1stnone.gif) no-repeat;}
  14. div#pagination a#paginprev {background:url(pagin/paginprev.gif) no-repeat;}
  15. div#pagination a#paginprevnone {background:url(pagin/paginprevnone.gif) no-repeat;}
  16. div#pagination a#paginnext {background:url(pagin/paginnext.gif) no-repeat;}
  17. div#pagination a#paginnextnone {background:url(pagin/paginnextnone.gif) no-repeat;}
  18. div#pagination a#paginlast {background:url(pagin/paginlast.gif) no-repeat;}
  19. div#pagination a#paginlastnone {background:url(pagin/paginlastnone.gif) no-repeat;}
Oczywiście obrazki możesz walnąć jako CSS Sprite i masz zmniejszony pobór na transferze. Aczkolwiek można nieco wydajniej jeszcze to mi to akurat kompletnie już nie wadzi. Tyle starcza.
Go to the top of the page
+Quote Post

Posty w temacie


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: 3.10.2025 - 20:11