Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Pager (stronicowanie), klasa, php4 i php5
nospor
post
Post #101





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
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 (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/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
Go to the top of the page
+Quote Post

Posty w temacie
- nospor   Pager (stronicowanie)   15.09.2005, 09:18:52
- - emi23o9   Witam! Mam pewien problemik. Dalaczajac pag...   22.01.2007, 17:29:35
- - AxZx   napisz co masz w linii 38 pliku pager.class.php   22.01.2007, 17:33:02
- - emi23o9   const _GOTO_FIRST_ = 'gtf'; praktycznie j...   22.01.2007, 17:35:16
- - nospor   jak na moj gust to ty uzywasz klasy napisanej dla ...   22.01.2007, 18:35:43
- - emi23o9   ajjjj.... sorka, moj blad.... wstyd i hanba, p...   22.01.2007, 19:18:03
- - primo   Możliwe, że o to co chcę zapytać już było w tym te...   24.02.2007, 23:40:22
- - nospor   musisz wywolac konstruktor z drugim parametrem, u ...   26.02.2007, 09:11:00
- - Maksymus007   a ja chyba znalazłem błąd, a może i nie [PHP] pobi...   11.03.2007, 10:12:53
- - nospor   hehe, faktycznie, tak to jest jak sie robi ctrl+c,...   11.03.2007, 11:40:56
- - Maksymus007   Dalej bawiłem się Twoja klasa i brakowało mi w nie...   10.04.2007, 21:50:47
- - nospor   CytatDalej bawiłem się Twoja klasa i bra...   11.04.2007, 07:59:39
- - Maksymus007   To wiem, ale nie o to mi chodzilo W tym co podałe...   11.04.2007, 13:39:45
- - nospor   No faktycznie ciut inaczej. Tak czy siak w "n...   11.04.2007, 13:49:43
- - microh   Mam pytanko odnośnie funkcji createLink [PHP] pob...   5.05.2007, 13:28:52
- - my salsa   eh czytaj dwa posty wyżej, post nospor`a   5.05.2007, 13:52:51
- - agnieszka87   Prośba do ludzi dobrej woli Przeróbcie mi poni...   12.05.2007, 20:50:22
- - microh   A ja mam jakiś dziwny problem. Konstruktor wywołał...   19.05.2007, 10:09:35
- - Balon   Cytato jeszcze pager startuje czasem od 3 strony. ...   19.05.2007, 10:30:31
- - nospor   CytatTo jeszcze pager startuje czasem od 3 strony....   21.05.2007, 09:52:28
- - Guli   Uzyłem tę klasę na swojej stronie ale coś nie dzia...   24.05.2007, 11:40:18
- - Balon   hm Ty nie rozumiesz chyba jakiej zasadzie dzia...   24.05.2007, 11:48:37
- - nospor   No ale przeciez klasa ci nie podzieli pliku. Skad ...   26.07.2007, 11:49:36
- - acztery   jak dla mnie 1 klasa. Znakomita robota. Tylko brak...   14.08.2007, 19:28:51
- - nospor   CytatIlość wszystkich rekordówhmmm, bylo tak? Juz ...   20.08.2007, 17:27:20
- - acztery   ok napisałem sobie, ale znalazłem 1 mały błąd chyb...   20.08.2007, 20:27:36
- - nospor   Cytatale cos nie nie tak po przejscu dalej zmienna...   21.08.2007, 07:16:11
- - become   czy przy pomocy tej klasy ustawie stronicowanie ta...   23.12.2007, 01:48:57
- - Cysiaczek   Dziwne pytanie zadajesz... ale tak - ustawisz, cho...   23.12.2007, 02:20:07
|- - become   Cytat(Cysiaczek @ 23.12.2007, 02:20:0...   29.12.2007, 17:33:13
- - kallosz   Witam Jest może możliwośc załączenia klasy pager ...   23.12.2007, 12:23:58
- - nospor   Cytatczy przy pomocy tej klasy ustawie stronicowan...   24.12.2007, 15:53:58
- - radziowi   Witam bardzo dziękuję za klase dzia...   26.12.2007, 13:36:33
- - Cysiaczek   Akurat jakiś czas temu przerobiłem metod...   29.12.2007, 17:52:37
- - nospor   CytatMam jednak dziwny zachowanie klasy. Za kazdym...   30.12.2007, 12:30:30
- - pawel.s   witajcie mam problem nie chce wyswietlic mi sie pa...   27.01.2008, 22:03:15
- - vokiel   może przez literówkę w template: e => a [HTML] ...   28.01.2008, 09:24:06
- - pawel.s   nie to nie przez to wogole jak zrobie vardump z ...   28.01.2008, 14:29:27
- - nospor   A jakiej wersji pagera uzywasz? Najnowszej 2.5 ? N...   28.01.2008, 14:39:05
- - pawel.s   wersja 2.0 dla php5 takiej uzywam co jest nie tak   28.01.2008, 16:17:24
- - nospor   [PHP] pobierz, plaintext <?php$pager->SetTot...   28.01.2008, 20:32:18
- - pawel.s   hej, oki wyswietlil mi sie poprawnie pager dalem ...   29.01.2008, 18:27:05
- - nospor   Cytatco dalej robic...odpowiem ci jak maszyna: zap...   29.01.2008, 21:17:19
- - pawel.s   jak chce wyswitlic kolejne 3 rekordy to pojawia mi...   29.01.2008, 21:40:17
- - nospor   normalnie masz jakies kosmiczne problemy. Pokaza c...   29.01.2008, 21:55:17
- - pawel.s   oto moj kod : [PHP] pobierz, plaintext <?phpswi...   30.01.2008, 17:15:33
- - nospor   CytatNotice: Undefined variable: do in ....A widzi...   30.01.2008, 19:15:47
- - pawel.s   nie moge kurcze tego rozgrysc w linku mam /_admin/...   30.01.2008, 20:24:39
- - Legro   Cześć @nospor Korzystam z Twojej klasy ...   22.04.2008, 18:20:59
- - aasat   Super robota, świetna klasa, podziękowania dla aut...   4.10.2008, 19:49:13
- - nospor   CytatCzy jest jakiś sposób na niceurl? bo widze w ...   6.10.2008, 10:02:12
- - piraciq   Witam ja zapodałem tą klasę do joomli i spisuje s...   17.10.2008, 09:24:31
- - aasat   Niceurl można bardzo łatwo utworzyć np chcemy aby...   16.12.2008, 23:42:41
- - szumigt   Witam. Właśnie próbuję zastosowa...   19.02.2009, 17:51:35
- - nospor   CytatKod ma jeszcze małą niedogodność w postaci st...   19.02.2009, 21:35:03
|- - szumigt   Uuuooo matko jaka pierdoła ze mnie. Już poprawiłem...   20.02.2009, 15:29:04
- - nospor   CytatChociaż nie wiem czemu klasa Pager nie ustawi...   20.02.2009, 19:23:34
- - nieraczek   Mogę się zapytać po co używasz...   27.02.2009, 17:57:12
- - nospor   CytatMogę się zapytać po co u...   27.02.2009, 19:40:49
- - nieraczek   Dzięki - a nawiasem mówiąc - dopiero teraz zwrócił...   27.02.2009, 22:21:27
- - nospor   Cytati na to, że trzeba tu podać liczb...   27.02.2009, 22:57:39
- - nieraczek   O dzięki za info   28.02.2009, 09:03:10
- - pianta_d   Witam Mam problem z sortowaniem po dwóch kolumnac...   6.07.2009, 07:11:07
- - hondek   Witam! Mam taki problem z klasa Pager: kiedy p...   6.07.2009, 12:38:06
- - nospor   a jak wyswietlasz linki pagera? Sam cos jeszcze ge...   14.07.2009, 06:59:31
- - hondek   nie, poprostu <?=$pag?> jedyna rzecz j...   15.07.2009, 15:48:54
- - nospor   Cytatjedyna rzecz jaka zmienilem w klasie to znak ...   16.07.2009, 07:11:22
- - tomall   Witam Czytam i czytam i znaleźć nie mogę. Jak wyc...   7.05.2010, 17:21:15
- - nospor   Metoda Make() zwraca ci tablice. Czytaj komentarze...   8.05.2010, 19:32:19
- - limonides   a ja mam takie zapytanie mam plik ciekawostki.php...   3.08.2010, 13:30:27
- - nospor   Wszystko masz w komentarzach Cytat/** * Konstruk...   3.08.2010, 13:41:31
- - limonides   dzieki wielkieee   5.08.2010, 10:02:10
- - mwolodzko   Witam, Mój problem polega na tym, że za cholery ni...   12.08.2010, 11:18:54
- - nospor   1) Coś dużo choler ci się w tekst wcina. 2) I gdzi...   12.08.2010, 17:44:36
- - mwolodzko   Konkretnie mój problem polega na tym, że trzeba d...   13.08.2010, 08:19:25
- - nospor   No to pokaż jak dodajesz.   13.08.2010, 08:32:45
- - mwolodzko   Np tak: [PHP] pobierz, plaintext <script type=...   16.08.2010, 10:39:59
- - nospor   Słuchaj... piszesz że masz problem z moim pagerem ...   16.08.2010, 10:49:04
- - mwolodzko   Ok, mój błąd znalazłem temat w google tytul tematu...   16.08.2010, 11:00:07
- - edwarpan   Coś mi nie działa. [PHP] pobierz, plaintext <?p...   25.08.2010, 16:29:07
- - nospor   CytatCoś mi nie działa.To coś napraw..... Czy ta...   25.08.2010, 18:03:40
- - northwest   Witam serdecznie, cosik nie chce mi zadziałać ta k...   30.11.2010, 12:39:44
- - nospor   zrob print_r($_GET); gdy bedziesz na jakiejs ...   30.11.2010, 12:51:05
- - northwest   [PHP] pobierz, plaintext Array ( [gt_id...   30.11.2010, 13:01:52
- - nospor   Nie, stalych sie nie zmienia! To masz zmieni...   30.11.2010, 13:15:17
- - northwest   działa, dzięki wielkie:))) ps. gdybym chciał osty...   30.11.2010, 13:21:50
- - nospor   1) Albo odbierz tablicę pagera i rob z nią co chce...   30.11.2010, 13:31:02
- - northwest   echo "<b>".$pag ."</b...   30.11.2010, 14:15:53
- - nospor   Cytatnie da się tego jakoś prościej zrobić? Nie. ...   30.11.2010, 14:21:03
- - northwest   zrobiłem sobie takie coś (walcze z klasą): [PHP] p...   30.11.2010, 14:57:41
- - nospor   Cytatw którym miejscu podmienić aktualny numerek (...   30.11.2010, 15:00:12
- - northwest   generalnie chciałbym efekt taki uzyskać: [HTML] po...   30.11.2010, 15:23:30
- - nospor   No ale po co tworzysz metode createHTMLLink2? Powi...   30.11.2010, 20:08:29
- - northwest   zadziałało, dzięki WIELKIE ))   30.11.2010, 23:40:47
- - Ziom73   Mi wywala: KodFatal error: Uncaught exception ...   7.02.2011, 19:46:26
- - nospor   Przeczytałeś chociaż komunikat błędu? Zjadłeś wywo...   8.02.2011, 07:11:04
- - Ziom73   Dzięki. Trochę przerobiłem to i działa. Mogłeś bar...   13.02.2011, 23:26:19
- - br0nks   Witam, fajna sprawa z tym:) aczkolwiek mam pewien...   27.02.2011, 22:54:44
- - nospor   Skoro piszesz w temacie, o mojej klasie Pager, to ...   28.02.2011, 07:15:48
- - br0nks   korzystam:) ten kod sluzy mi tylko do wyświetlani...   28.02.2011, 10:01:49
- - nospor   No to pokaż kod, co do którego masz pytanie i któr...   28.02.2011, 10:16:31
3 Stron V  < 1 2 3 >


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 - 03:51