Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Pager (stronicowanie), klasa, php4 i php5
nospor
post 15.09.2005, 09:18:52
Post #1





Grupa: Moderatorzy
Postów: 36 483
Pomógł: 6303
Dołączył: 27.12.2004




info
pobierz

Hejka, prezentuję klasę Pager. Umożliwia ona wygenerowanie pager'a oraz pobranie aktualnych indexów rekordów.

Użycie jest proste:

  1. <?php
  2.    $pager = new Pager('idPagera');
  3.    //okreslenie liczby wszystkich rekordów na 500
  4.    $pager->SetTotalRecords(500);
  5.    echo $pager->Render();//wyswietlenie pagera
  6. ?>


Polączenie pagera z pobieraniem rekordów z bazy:
  1. <?php
  2.    $sql = 'select count(*) from TABLE';
  3.    $result = mysql_query($sql);
  4.    $row = mysql_fetch_array($result);
  5.    $recordsCount = $row[0];//pobranie liczby rekordów
  6.    $pager = new Pager('idPagera');
  7.    $pager->SetTotalRecords($recordsCount);//ustawienie liczby rekordów
  8.    //wygenerowanie pagera i zapamietanie go w zmiennej w celu
  9.    //pozniejszego wyswietlenia
  10.    $renderPager = $pager->Render();
  11.    $start = $pager->GetIndexRecordStart();//pobranie indexu rekordu początkowego
  12.    $end = $pager->GetIndexRecordEnd();//pobranie indexu rekordu koncowego
  13.    //zapytanie z uwzglenieniem stronicowania
  14.    $sql = 'select * from TABLE limit '.$start.','.($end - $start + 1);
  15.    //...pobranie wyników i ich wyswietlenie
  16.    echo $renderPager; //wyswietlenie pager'a
  17. ?>

(edit: te przyklady od wersji 2.5 troche inaczej beda wygladac. poprawne kody w paczce)

W podanym przykladzie brakuje oczywiscie sprawdzania, czy dane zapytanie wykonalo sie poprawnie itp. Nie podawałem tego jednak po to, by nie zaciemniać kodu.


Klasa generuje unikalne dla każdego pagera (poprzez idPager'a) zmienne, dzięki czemu na stronie może byc kilka pagerów do różnych tabel. Dodatkow, jesli korzystacie z sesji, klasa pamieta strony w sesji, dzięki czemu nie tracone są informacje o aktualnej stronie przy odwiedzaniu innych linków


Klasa ma 3 sposoby przechodzenia do kolejnych stron:
1) generuje własny wewnetrzny formularz i go submituje
Konstruktor tylko z pierwszym argumentem
2) korzysta z zewnetrznego formularza i musi byc w nim zawarta
Konstruktor z pierwszym i trzecim argumentem. Jako trzeci argument należy podać
idFormularza zawnętrznego
3) poprzez linki. Należy wówczas określić drugi parametr w konstruktorze, który będzie linkiem podstawowym. Do niego dodany będzie parametr odnosnie strony. Ten sposób generuje ogólne zmienne dla pagera, przez co lepiej żeby dla niego na stronie byl tylko jeden pager. Sposób ten może być wykorzystywany przy wyszukiwarkach.

To chyba wszystko. Wszelkiego rodzaju uwagi, sugestie bądź wynalezione błędy proszę zgłaszać. Wysłucham każdej smile.gif

Aha, sposób implemetncji klasy dostosowany do php4. Klasa nie korzysta z żadnych dziwnych funkcji, więc można łatwo dostosować ją do php5. Należy tylko metody i zmienne deklarować w sposób odpowiedni dla php5.

Wszystkie metody i zmienne zaczynajace się na podkreslenie (_) oznaczają, iż są to metody i zmienne prywatne.

A oto przykladowy widok pager'a:
Cytat
|<  <<  <  21  22  23  24  25  26  27  28  29  30  z 200  >  >>  >|

oczywiscie wszystko to linki oprócz aktualnej strony.

Pager jest łatwo konfigurowalny. MOżecie sami okreslic liczbe rekordów na stronie, liczbę stron w pagerze itp.

A pozatym niech wam dobrze służy smile.gif

edit (2006-04-03)
W związku z licznymi uwagami, by klasa nie generowala linkow co x, tylko pare linków przed stroną i parę linków po, wprowadzilem lekkie modyfikacje. Sposób uzywania klasy nie uległ zmianie (jest kompatybilna wstecz smile.gif ). Chcąc użyc nowej metody generowania linków, wystarczy wywołać metodę render() z parametrem true:
  1. <?php
  2. echo $pager->Render(true);
  3. ?>

Mam nadzieję, że w ten sposób usatysfakcjonowałem parę osób winksmiley.jpg

edit (2006-06-13)
Dawno nic nie pisalem. Czas zmienic. A wiec jest wersja 2.0
Główne zmiany:
1) odejscie od przesylania pagera formularzem
2) zapisywanie Pagera do tablicy, z której mozna samemu wygenerowac kod html Pager'a
3) PLucie wyjatkami smile.gif
4) no i obecna wersja jest pod php5. Niedlugo dorobie tez wersje pod php4.

Zapraszam do sciagania i testowania.
W paczce jest kilka przykaldow, min. jak nalezy doczepic generowanie wlasnego kodu html.

Jesli zrobicie swoja funkcje generujaca kod html i bedziecie chcieli sie nia podzielic, wyslijcie mi a ja upublikuje wersje demo z wasza funkcja i wygladem pagera.

edit: 2.0 jest juz i pod php4

edit (2006-08-22)
Wersja 2.01:
- dorobilem na szybko ten link. teraz w konstruktorze, jesli podamy drugi parametr i bedzie w nim ciag:
#PAGE# to link ten zostanie niezmieniony, czyli bedzie tak jak user podal, za wyjatkiem #PAGE#, ktore zostanie zamienione na numer strony
Czyli dla przykladu co podal AxZx powinno byc:
  1. <?php
  2. $pager = new Pager('idPagera', 'wszystkie_numery_#PAGE#');
  3. ?>


- metoda Render moze zwracac teraz tablicę pagera zamiast kodu html. Należy ustawic na true jej trzeci parametr

edit (2007-07-26)
Wersja 2.5. Więcej info tu: http://nospor.pl/pager-2.5.html


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post

Posty w temacie
- nospor   Pager (stronicowanie)   15.09.2005, 09:18:52
- - Bakus   Rozwiązanie bez wątpienia warte uwagi, ale po sesj...   15.09.2005, 15:51:32
- - nospor   @Bakus Widzę że kod przeanalizowales dokladnie . D...   15.09.2005, 16:03:53
- - Bakus   Przydał by się jeszcze jeden mały bajer: "poł...   18.09.2005, 18:59:50
- - nospor   mówisz - masz   19.09.2005, 08:54:33
- - Bakus   cudo   21.09.2005, 15:19:08
- - OnE.Killer   Mam kod ktory pobiera dane z bazy mysql (w tablicy...   21.09.2005, 18:11:30
- - NuLL   Masz wszystko przecież jak wół napisane.   21.09.2005, 18:54:16
- - AxZx   wydaje mi sie ze klasa generuje kod HTMl niezgodny...   21.09.2005, 19:56:17
- - nospor   @OnE.Killer odpowiedzialem tutaj: http://forum.php...   22.09.2005, 08:09:56
- - AxZx   wiem ze mozna samemu sobie zmienic, ale czemu ty n...   22.09.2005, 13:04:25
- - nospor   Cytatwiem ze mozna samemu sobie zmienic, ale czemu...   22.09.2005, 13:27:31
- - AxZx   http://www.w3.org/ sprawdz strony z Twoim stronic...   22.09.2005, 13:35:39
- - nospor   aha, już czaję o co ci chodzi. Chcesz by aktualna ...   22.09.2005, 13:41:23
- - AxZx   a jeszcze mam takie pytanie, chociaz nie wiem czy ...   23.09.2005, 14:00:53
- - nospor   he? Czy Twoje pytanie ma związek z Pager'em? B...   23.09.2005, 14:25:27
- - AxZx   branza.1.2 1 to numer branzy a 2 to numer strony:...   23.09.2005, 14:28:28
- - nospor   O, i nie można było tak od razu ? Teraz wszystko ...   23.09.2005, 14:34:39
- - dr_bonzo   A moze dodac dodatkowa klase do generowania linku:...   23.09.2005, 15:10:15
- - AxZx   dobry pomysl tylko nie kazdy jest takim geniuszem...   23.09.2005, 15:12:28
- - dr_bonzo   Heh, przeciez opisalem funkcjonalnosc tej klasy. ...   23.09.2005, 15:19:39
- - nospor   Z tą nową klasą to chyba lekka przesada. Aż tyle r...   24.09.2005, 10:55:23
- - sf   Pierwsza klasa zwraca obiekt/tablice z danymi, kto...   24.09.2005, 13:03:37
- - AxZx   czy trwaja prace nad rozbudowa skryptu?   9.11.2005, 21:11:21
- - nospor   NIestety nie. Powód ciągle ten sam Na przyszłość...   12.11.2005, 20:26:50
- - basu   Czy wiecie jak zrobić/zodyfikować pagera, aby chod...   26.12.2005, 13:12:33
- - nospor   pytasz juz o to tutaj: http://forum.php.pl/index.p...   26.12.2005, 13:18:18
- - Diablos   A jak zastosowac pagera przy template'ach ? Pr...   26.12.2005, 14:42:40
- - nospor   kurka, jakis dziwny jestem. OPT tez nie uzywalem ...   26.12.2005, 14:50:22
- - basu   Jednak sobie poradzilem ze stronicowaniem w PDO ...   27.12.2005, 18:24:14
- - nospor   CytatJesli poprawimy pager na:Ja tylko sprostuje. ...   28.12.2005, 20:43:14
- - basu   w sumie racja ale najwazniesze ze chodzi. Za nab...   28.12.2005, 20:57:42
- - SongoQ   CytatProblem polegal na tym ,ze $stmt->row...   28.12.2005, 22:42:28
- - bigZbig   @nospor -> Z przeczytanych postow dowiedzialem ...   25.01.2006, 12:22:53
- - nospor   CytatPomieszanie kodu logicznego z warstwa prezent...   3.02.2006, 10:02:31
- - Fallout   Witam, mam problem z tym skryptem, gdyż nie wiem ...   28.02.2006, 05:55:16
- - nospor   [PHP] pobierz, plaintext <?php$pager->$_star...   28.02.2006, 09:21:51
- - Fallout   Hehe, wierze na słowo bo nie wiem czemu mimo zeby ...   5.03.2006, 12:24:05
- - nospor   CytatI mam pytanie, czy to nie jest efektywniejsze...   6.03.2006, 16:37:42
- - Legro   witam, nie moge sobie z tym poradzic, probowalem j...   19.03.2006, 12:24:52
- - Levabul   NIe wiem czy ktoś zauważył ale w 128 lini jest lit...   19.03.2006, 13:04:30
- - nospor   @legro w pierwszym poscie masz co i jak... [PHP] p...   19.03.2006, 15:44:25
- - Legro   @nospor - wielkie dzięki.. Działa wszystko ok, wyś...   19.03.2006, 16:48:58
- - bohusz   Witam Jak połaczyć pager z tym kodem wyszukiwarki?...   28.03.2006, 17:58:16
- - nospor   [PHP] pobierz, plaintext <?php $sql = ...   28.03.2006, 19:50:43
- - acztery   świetna sprawa . ale brakuje mi tu tego co już kto...   1.04.2006, 15:18:48
- - nospor   Widzę, ze nie dacie mi spokoju z tymi pare przed i...   3.04.2006, 10:40:46
- - acztery   jeszcze zapamietywanie podstron w sesjach i bedzie...   3.04.2006, 11:40:38
- - nospor   Cytatjeszcze zapamietywanie podstron w sesjach i b...   3.04.2006, 11:43:40
- - acztery   tak masz racje nie mam session_start() a co z ty...   3.04.2006, 11:45:07
- - nospor   jestes pewien ze to chodzi o generowanie pagera? z...   3.04.2006, 11:48:08
- - acztery   w smartach jest włączone cacheowonie. Oki w sesj...   3.04.2006, 11:52:31
- - nospor   Cytattrzeba definiowac id pageraNo tak. Przy inicj...   3.04.2006, 11:54:43
- - acztery   wypas super robota   3.04.2006, 11:56:42
- - nospor   Dawno nic nie pisalem. Czas zmienic. A wiec jest w...   13.06.2006, 16:08:47
- - bigZbig   Bardzo mi sie podoba ograniczenie pracy pagera jed...   18.07.2006, 11:30:39
- - nospor   CytatMoim zdaniem dane niezbedne do pracy pagera p...   18.07.2006, 11:41:34
|- - bigZbig   Cytat(nospor @ 18.07.2006, 12:41 ) NIe wi...   18.07.2006, 11:55:51
- - nasty_psycho   Ja osobiscie Pager-a uzylem do pewnego projekyu i ...   2.08.2006, 10:28:01
- - nospor   @nasty_psycho ale ty uzywales Pager ver 2.0? Przec...   2.08.2006, 10:32:52
- - AxZx   kiedy mozna (czy wogole mozna) spodziewac sie tej ...   11.08.2006, 12:51:53
- - nospor   Ups.... zupelnie o tym zapomnialem. W nastepnym ty...   11.08.2006, 16:22:26
- - hugonot   Mam problem, uzylam kodu tak jak w przykladzie, ws...   12.08.2006, 15:03:17
- - nospor   Problem jako taki nie jest związany z moj...   12.08.2006, 15:21:09
- - AxZx   dzieki za klase w wersji dla php4 mam problem jak...   16.08.2006, 16:40:04
- - nospor   @AxZx nie bede sciemnial. mod_rewrite to dla mnie ...   16.08.2006, 17:04:06
- - AxZx   hmm chcialbym moc wprowadzic jak ma wygladac url ...   16.08.2006, 17:53:34
- - nospor   @AxZx z racji ze szerzych po różnych topicach...   21.08.2006, 13:46:37
- - nasty_psycho   nospor: a co ty powiesz na taki pomysl (moze w wer...   21.08.2006, 18:31:05
- - AxZx   chyba chodzi ci o to samo o co mnie:) balon wlasni...   21.08.2006, 18:40:51
- - nospor   co za lenie.... Dobra, leniwy klient nasz Pan. S...   22.08.2006, 07:26:36
- - bigZbig   @nospor jak widzisz problem wizualizacji linkow po...   22.08.2006, 07:35:03
- - nospor   @bigZbig jak tak sie dluzej nad tym zastanawiam to...   22.08.2006, 16:47:28
- - AxZx   fantastycznie:) coraz lepsza klasa a nie lepiej z...   22.08.2006, 17:00:37
- - nospor   No ale teraz to ustawiasz w konstruktorze. Co za r...   22.08.2006, 17:02:31
- - nasty_psycho   CytatO ile moja propozycja wydaje mie sie bardziej...   23.08.2006, 17:53:06
- - bigZbig   @nasty_psycho - wzorzec strategi jest bardzo latwy...   24.08.2006, 10:34:38
|- - nasty_psycho   Cytat(bigZbig @ 24.08.2006, 11:34 ) @nast...   24.08.2006, 16:02:29
- - AxZx   gdzie mozna nauczyc sie takiego fachu ?   24.08.2006, 11:02:44
- - Lee   Nie mam zielonego pojęcia jak to ze smarty połączy...   24.08.2006, 16:39:24
- - AxZx   Cytat(nasty_psycho @ 24.08.2006, 15:02 ) ...   24.08.2006, 17:31:28
- - nospor   CytatNie mam zielonego pojęcia jak to ze smarty po...   24.08.2006, 17:46:54
- - Lee   co to jest stronicowanie to wiemi jak to dziala (z...   24.08.2006, 18:05:16
- - nospor   Cytatale nie wiem jak to napisacNie wiesz jak napi...   24.08.2006, 18:09:31
- - Lee   Trzeci parametr ? [PHP] pobierz, plaintext <?ph...   24.08.2006, 18:21:49
- - AxZx   3 parametr metody render   24.08.2006, 18:24:15
- - Lee   No to teraz kompletnie nic nie rozumiem   24.08.2006, 18:42:07
- - nospor   @Lee chlopie, olej tablice, bo dla dziebie to za w...   24.08.2006, 18:46:09
- - Lee   Nie obraziłem się, bo sam stwierdzam że jestem tęp...   24.08.2006, 19:37:17
- - nospor   Cytatustawiłem sobie ze ma mi wyswietlać 4 ale to ...   24.08.2006, 20:10:24
- - Lee   No fakt jest row, ale przed chwilą miałem wysłac d...   24.08.2006, 20:15:13
- - tomick_pl   Hmmm... zauważyłem złe generowanie ...   16.09.2006, 11:39:27
- - AxZx   tez to zauwazylem, ale gdy przeskoczysz na 27 ktor...   16.09.2006, 11:43:06
- - tomick_pl   No tak, ale ja nie lubię takich małych bugów- fakt...   16.09.2006, 12:03:02
- - nospor   Dzieki za wykrycie buga Po prostu link o x do tyl...   17.09.2006, 20:16:28
- - tomkoz11   Świetna klasa nospor! Wielkie dzięki...   18.11.2006, 09:54:21
- - czerwony2   Mam pytanie: Jak powinien wyglądać prawidłowo kons...   29.12.2006, 13:31:41
- - nospor   Widze ze korzystasz ze starej wersji, 1.0, bo w wy...   29.12.2006, 13:45:10
- - czerwony2   OK trochę posiedziałem, ale udało mi się zrobić to...   30.12.2006, 03:34:21
- - nospor   CytatNieśmiało wydaje mi się że znalazłem małą ska...   2.01.2007, 09:00:46
3 Stron V   1 2 3 >


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

 



RSS Wersja Lo-Fi Aktualny czas: 28.06.2024 - 05:59