Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Paginacja wyników- light
Forum PHP.pl > Forum > Gotowe rozwiązania > Algorytmy, klasy, funkcje
trucksweb
Na potrzeby swojej pracy i po calym dniu meczenia sie nad zmiennymi (ktos na tym forum poiwedzial, ze sie nie da, a tu niespodzianka- dalo sie i ladnie dziala)
Najwazniejsze- funkcja bardzo prosta, latwa do konfiguracji i implementacji dla kazdej strony.

  1. <?php
  2. //deklaracja paginacji autor: trucksweb [at] interia.pl
  3. function paginacja_start() {
  4. //okreslenie funkcji globalnych
  5. global $start;
  6. global $pokaz;
  7.  
  8. //jesli przekazano parametr punktu poczatkowego
  9. if(isset($_GET['s'])) {
  10.  
  11. $start=$_GET['s'];
  12.  
  13. //jesli nie wgraj ustawienia domyslne
  14. }else { 
  15. $start=1;
  16. $pokaz=10;
  17. }
  18.  
  19. }//koniec paginacja_start
  20.  
  21. //wyswietlenie paginacji i obsluga odnosnikow autor: trucksweb [at] interia.pl
  22. function paginacja($liczba_stron,$start,$pokaz,$biezaca_strona) {
  23.  
  24. /**********************************************************************/
  25. //ustawienia wyswietlania linkow
  26. $poprzednia_link = TAK; // TAK-jesli ma pokazywac, ze jest to pierwsza strona, NIE-nie pokazuj
  27. $nastepna_link = NIE; // TAK-jesli ma pokazywac, ze jest to ostatnia strona, NIE-nie pokazuj
  28.  
  29. /*********************************************************************/
  30.  
  31. //zliczenie wszystkich stron
  32. $query = "SELECT COUNT(*) FROM faktury ORDER BY id DESC";
  33. $result = mysql_query($query);
  34. $row = mysql_fetch_array($result, MYSQL_NUM);
  35. $liczba_rekordow = $row[0];
  36.  
  37. //wyznaczenie ilosci stron
  38.  if($liczba_rekordow > $pokaz) {
  39.  //jesli jest wiecej niz jedna
  40.  $liczba_stron = ceil ($liczba_rekordow/$pokaz);
  41. }else {
  42. $liczba_stron =1;
  43. }
  44.  
  45. //wyznaczenie punktu poczatkowego
  46. if(isset($_GET['s'])) {
  47. $start = $_GET['s'];
  48.  }else {
  49. $start = 0;
  50. }
  51.  
  52.  
  53. //tworzenie lacz do pozostalych stron, jesli takie sa
  54. if($liczba_stron > 1) {
  55. //okreslenie biezacej strony
  56. $biezaca_strona = ($start/$pokaz) + 1;
  57.  
  58. //jesli nie jest to pierwsza strona, tworzenie lacza do Poparzedniej
  59. if($biezaca_strona !=1) {
  60. echo ' <a href="faktury.php?s='.($start - $pokaz).'&ls='.$liczba_stron.'">Poprzednia </a> ';
  61. }else {
  62. //jezeli jest to pierwsza strona, pokaz/ukryj informacje
  63. if($poprzednia_link == 'TAK') {
  64. echo 'Poprzednia ';
  65. }else {
  66. echo '';
  67. }
  68. }
  69.  
  70.  //tworzenie lacz do pozostalych stron
  71. for($i=1; $i <= $liczba_stron; $i++) {
  72. if($i !=$biezaca_strona) {
  73. echo ' <a href="faktury.php?s='.(($pokaz * ($i - 1))).'&ls='.$liczba_stron.'"> '. $i . ' </a> ';
  74.  }else{
  75. echo $i. ' ';
  76. }
  77. }
  78.  
  79. //jezeli nie jest to ostatnia strona, tworzenie lacza do Nastepnej
  80. if($biezaca_strona != $liczba_stron) {
  81. echo ' <a href="faktury.php?s='.($start + $pokaz).'&ls='.$liczba_stron.'">Następna</a> ';
  82. }else { 
  83. //jezeli jest to ostatnia strona pokaz/ukryj informacje
  84. if($nastepna_link == 'TAK') {
  85. echo ' Następna';
  86. }else {
  87. echo '';
  88. }
  89. }
  90. }
  91. }//koniec paginacji
  92.  
  93.  
  94. ?>


implementacja dla strony:

  1. <?php
  2.  
  3. //okreslenie wynikow paginacji
  4. paginacja_start($pokaz=10);
  5.  
  6. //standardowe zapytanie, na koncu dajemy LIMIT ze zmiennymi !
  7. $zapytanie = "SELECT cos FROM tabela ORDER by cos DESC LIMIT $start, $pokaz";
  8.  
  9.  
  10. //wyswietlenie paginacji:
  11. paginacja($liczba_stron,$start,$pokaz,$biezaca_strona);
  12. ?>


mozemy w ustawieniach TAK/NIE zadeklarowac czy na skrajnych stronach maja sie pokazywac teksty: poprzednia/nastepna.

dla jednego zapytania mozemy wywolywaj wiele paginacji:
  1. <?php
  2. paginacja($liczba_stron,$start,$pokaz,$biezaca_strona);
  3.  
  4. //jakis kod strony
  5.  
  6. paginacja($liczba_stron,$start,$pokaz,$biezaca_strona);
  7.  
  8. ?>


Moze komus sie przyda czarodziej.gif
Funkcja bedzie rozwijana bo musze ja uzywac w swoim systemie.

Wszelkie sugestie mile widziane (funkcja idealna nie jest, ale to sie kidys zmieni)...
AxZx
  1. <?php
  2. $poprzednia_link = TAK;
  3. ?>

nie ma czegos takiego jak TAK.
jak juz chcesz w taki dziwny sposob to zrobic to tak: 'TAK'
chyba ci sie pomylilo z TRUE

  1. <?php
  2. $poprzednia_link = TRUE;
  3. if($poprzednia_link)
  4. {
  5.  
  6. }
  7. ?>
trucksweb
nie pomylilo mi sie dry.gif
moze byc dowolny znak ,cyfra, litera,slowo- to jest wartosc zmiennej.

//edit
tak, zapomnialem '' ale juz zmienilem na cyfrowe oznaczenia.

Jest poprawka funkcji(gdy chcemy miec wiecej paginacji w serwisie):
-w tej wersji mozna deklarowac rozne tabele, np. dla kazdej strony czy zapytania
-zmniejszylem uzycie zmiennych globalnych, zastapilem to sesjami.(nie ma jeszcze walidacji poprawnosci danych z sesji)
-dalem obsluge styli
-konfiguracja polega na wpisaniu nazwy tabeli i kolumny wedlug ktorej ma nastapic sortowanie oraz ilosc wynikow na stronie.


funkcja:
  1. <?php
  2.  
  3. //deklaracja paginacji
  4. function paginacja_start() {
  5. //okreslenie funkcji globalnych
  6. global $start;
  7.  
  8.  
  9. //jesli przekazano parametr punktu poczatkowego
  10. if(isset($_GET['s'])) {
  11.  
  12. $start=$_GET['s'];
  13.  
  14. //jesli nie wgraj ustawienia domyslne
  15. }else { 
  16. $start=0;
  17. $pokaz= 5;
  18. }
  19.  
  20.  
  21. }//koniec paginacja_start
  22.  
  23. //wyswietlenie paginacji i obsluga odnosnikow
  24. function paginacja($liczba_stron,$biezaca_strona,$pokaz) {
  25.  
  26. /**********************************************************************/
  27. //ustawienia wyswietlania linkow
  28. $poprzednia_link = 1; // 1-jesli ma pokazywac, ze jest to pierwsza strona, 0-nie pokazuj
  29. $nastepna_link = 0; // 1-jesli ma pokazywac, ze jest to ostatnia strona, 0-nie pokazuj
  30.  
  31. /*********************************************************************/
  32.  
  33. //zmienna okreslajaca nazwe tabeli, ktorej dotyczy paginacja
  34. $tabela = $_SESSION['tabela'];
  35. $wedlug = $_SESSION['wedlug'];
  36.  
  37.  
  38. //zliczenie wszystkich stron
  39. $query = "SELECT COUNT(*) FROM $tabela ORDER BY $wedlug DESC";
  40. $result = mysql_query($query);
  41. $row = mysql_fetch_array($result, MYSQL_NUM);
  42. $liczba_rekordow = $row[0];
  43.  
  44. //wyznaczenie ilosci stron
  45.  if($liczba_rekordow > $pokaz) {
  46.  //jesli jest wiecej niz jedna
  47.  $liczba_stron = ceil ($liczba_rekordow/$pokaz);
  48. }else {
  49. $liczba_stron =1;
  50. }
  51.  
  52. //wyznaczenie punktu poczatkowego
  53. if(isset($_GET['s'])) {
  54. $start = $_GET['s'];
  55.  }else {
  56. $start = 0;
  57. }
  58.  
  59.  
  60. //tworzenie lacz do pozostalych stron, jesli takie sa
  61. if($liczba_stron > 1) {
  62. //okreslenie biezacej strony
  63. $biezaca_strona = ($start/$pokaz) + 1;
  64.  
  65. //jesli nie jest to pierwsza strona, tworzenie lacza do Poparzedniej
  66. if($biezaca_strona !=1) {
  67. echo '<a href="?s='.($start - $pokaz).'&ls='.$liczba_stron.'" class="paginacja_strona">&laquo; Poprzednia</a>';
  68. }else {
  69. //jezeli jest to pierwsza strona, pokaz/ukryj informacje
  70. if($poprzednia_link == 1) {
  71. echo '<span class="paginacja_strona">&laquo; Poprzednia</span>';
  72. }else {
  73. echo '';
  74. }
  75. }
  76.  
  77.  
  78.  //tworzenie lacz do pozostalych stron
  79. for($i=1; $i <= $liczba_stron; $i++) {
  80. if($i !=$biezaca_strona) {
  81. echo '<a href="?s='.(($pokaz * ($i - 1))).'&ls='.$liczba_stron.'" class="paginacja_link">'. $i . '</a>';
  82.  }else{
  83. echo '<span class="paginacja_biezaca">'.$i.'</span>';
  84. }
  85. }
  86.  
  87. //jezeli nie jest to ostatnia strona, tworzenie lacza do Nastepnej
  88. if($biezaca_strona != $liczba_stron) {
  89. echo '<a href="?s='.($start + $pokaz).'&ls='.$liczba_stron.'" class="paginacja_strona">Następna &raquo;</a>';
  90. }else { 
  91. //jezeli jest to ostatnia strona pokaz/ukryj informacje
  92. if($nastepna_link == 1) {
  93. echo '<span class="paginacja_strona">Następna &raquo;</span>';
  94. }else {
  95. echo '';
  96. }
  97. }
  98. }
  99.  
  100.  
  101. }//koniec paginacji
  102.  
  103. ?>


wywolanie stronicowania:
  1. <?php
  2. //w dowolnym pliku php
  3.  
  4. //okreslenie wynikow paginacji
  5. $_SESSION['tabela'] = 'noty';  //nazwa tabeli
  6. $_SESSION['wedlug'] = 'id_noty'; //sortuj wedlug
  7. $pokaz = 5; //ilosc wynikow na stronie
  8. paginacja_start($pokaz); 
  9.  
  10. //standardowe zapytanie
  11. $zapytanie = "SELECT cos FROM z_czegos ORDER by cos DESC LIMIT $start, $pokaz";
  12. $wynik = mysql_query($zapytanie);
  13.  
  14. //itp...
  15.  
  16. //wyswietlenie stronicowania w dowolnym miejscu:
  17. //tu sie nic nie zmienia
  18. paginacja($liczba_stron,$biezaca_strona,$pokaz);
  19.  
  20.  
  21. ?>
AxZx
a po co taki kod
  1. <?php
  2. }else {
  3. echo '';
  4. }
  5. ?>

?
raczej jest on zbedny.
rafalp
Może mi to ktoś wyjaśnić jak może zadziałać wywołanie funkcji:

  1. <?php
  2. paginacja($liczba_stron,$biezaca_strona,$pokaz);
  3. ?>


skoro wcześniej w kodzie zmienne: $liczba_stron, $biezaca_strona nigdzie nie istnieją i nie są to zmienne globalne?
trucksweb
to wywal te zmienne i zobacz czy ci dziala
cckoles
1. Nie nadaje się do implementacji dla każdej strony bo np. ja nie korzystam z tablicy $_GET[] i co mi po takiej klasie ? Sam klasa nie powinna zajmować się grzebaniem w tablicy bo nie taka jest jej rola.

2. Zapytanie w klasie questionmark.gif?

3. widok w klasie questionmark.gif?

Gdzie tutaj sens i logika ?
zerosix
Witam,
od 5 godzin probuje przerobic ta klase aby powyzej 10 stron wyswietlala zamiast <<poprzednia 1 2 3 4 5 nastepna>> np.
<< pierwsza <<poprzednia ...14 15 16 17 18 ..nastepna >> ostatnia >> .Znalazlem inna klase ktora to robi,ale kompletnie jej nie rozumiem.

Gdyby ktos mogl wkleic jakis kod ktory moglby pomoc albo chociaz naprowadzic jak to trzeba zrobic bylbym bardzo wdziecznybo jestem w slepym punkcie.


pozdrawiam
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-2024 Invision Power Services, Inc.