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
Pilsener
post
Post #2





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

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


Użyj np. takiej prostej funkcji:

  1. function tresc_pasek($l_odp,$l_odp_nastronie,$l_odp_napasku,$a) { //funkcja tworz�ca nawigacj�
  2. $l_odp_podz = intval($l_odp/$l_odp_nastronie)+1;
  3. $l_odp_podz_mod = $l_odp%$l_odp_nastronie;
  4. if($l_odp_podz_mod>0){++$l_odp_podz;}
  5. if($a>=$l_odp_podz){$a=$l_odp_podz-1;}
  6. if($a>1){$tablica['prev']=$a-1;}else {$tablica['prev']=0;}
  7. if($a<=$l_odp_napasku){$koniec=$l_odp_napasku*2+2;}else{$koniec=$a+$l_odp_napasku+1;}
  8. if($a<=$koniec-$l_odp_napasku){$star=$a-$l_odp_napasku;}
  9. if($a>=$l_odp_podz-$l_odp_napasku){$star=$l_odp_podz-$l_odp_napasku*2-1;}
  10. if($koniec>$l_odp_podz){$koniec=$l_odp_podz;}
  11. if($star<1){$star=1;}
  12. for($i=$star;$i<$koniec;++$i){
  13. if($i<$a){$tablica[]=$i;}
  14. if($i==$a){$tablica['active'] = $i;}
  15. if($i>$a){$tablica[]=$i;}
  16. }
  17. if($a<$l_odp_podz-1){$tablica['next']=$a+1;}else{$tablica['next']=0;}
  18. return $tablica;
  19. }


Funkcję tą znalazłem na tym forum i trochę ulepszyłem. Użycie jest proste, wystarczy nakarmić funkcję argumentami:
- l_odp - ilość rekordów
- l_odp_nastronie - ilość rekordów na jedną stronę
- l_odp_napasku - rozmiar paska nawigacyjnego (a konkretnie liczba linków z każdej strony bieżącego numeru)
- a - numer bieżącej strony

Funkcja zwraca posortowaną tablicę stron z zaznaczeniem aktywnej, poprzedniej oraz następnej. Wystarczy połączyć z kodem HTML i użyć.

Edit: napisałem prostej, po co do tego nie wiadomo jak wychuchana klasa? Gdy używam frameworków to korzystam z takich klas, ale tutaj nie warto dorabiać całej ideologii i dyskutować o tym, czy kod jest syfiasty i czy zawiera błędy lub o rozwoju jego (bo to ma być prosty helper i taka debata nie ma sensu), nie pisze się kodu po to, by ładnie wyglądał czy był słuszny ideologicznie.

Ten post edytował Pilsener 28.07.2010, 14:59:27
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: 4.10.2025 - 12:38