Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

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





Grupa: Moderatorzy
Postów: 36 557
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 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
- - br0nks   [PHP] pobierz, plaintext <?//Ładowaniu pliku ko...   28.02.2011, 14:29:13
- - nospor   Przecież pierwszy kod który pokazałeś w poście wyż...   28.02.2011, 14:46:00
- - br0nks   teraz to ja nie rozumiem hahahaha ten 2gi kod to...   28.02.2011, 17:46:24
- - nospor   Cytati zostaje tylko juz jedno... jak zrobic aby z...   28.02.2011, 22:06:56
- - br0nks   sweitnie, nie pomogles mi w niczym o co pytalem.. ...   28.02.2011, 23:06:04
- - nospor   RE: Pager (stronicowanie)   28.02.2011, 23:50:05
- - br0nks   Nie wiem co się stało, ale nagle z dnia na dzień, ...   28.04.2011, 19:06:26
- - nospor   Odpalsz skrypt napisany w php5 na php4. Skoro nagl...   28.04.2011, 19:08:59
- - br0nks   dokładnie tam mam hosta.. i co teraz mam zrobić z ...   28.04.2011, 19:15:13
- - dawidox66   a w ogole jaki cel jest takiego downgrade?   28.04.2011, 21:11:42
- - mlawnik   Może rozszerzenie *.php5? Ale jak wywalili php5 t...   28.04.2011, 21:22:14
|- - br0nks   Cytat(mlawnik @ 28.04.2011, 21:22:14 ...   28.04.2011, 21:33:32
- - mlawnik   Proszę bardzo.   28.04.2011, 22:18:41
- - br0nks   a nie da się jakoś zrobić aby nie wpisywać rozszer...   28.04.2011, 22:37:50
- - lobopol   Mam problem ze zdefiniowanym linkiem [PHP] pobierz...   11.05.2011, 13:49:52
- - northwest   Witam serdecznie, mam taki kod: [PHP] pobierz, pla...   24.05.2011, 22:35:05
- - nospor   No ale w $_GET Twój ruter ustawia index page?...   25.05.2011, 06:21:50
- - northwest   tablica jest pusta Jak ręcznie wstawić pozycję? ...   25.05.2011, 08:44:30
- - nospor   Nie, masz zostawić wszystko jak było, nic nie komb...   25.05.2011, 08:49:18
- - northwest   zrobiłem tak jak mówiłeś: [PHP] pobierz, plaintext...   25.05.2011, 09:16:25
- - nospor   Nie wiem jak ci to wytłumaczyć.... $pager-...   25.05.2011, 09:32:55
- - northwest   super,działa )) dzięki:)   25.05.2011, 09:37:32
- - JamalBIG   Witam Może mi ktoś podpowiedzieć jak pozbyć się b...   4.07.2011, 20:03:10
- - nospor   Odpalasz to na php4 a powinienes na php5   5.07.2011, 07:22:11
- - melkorm   W pliku .htaccess: Dla 5.3 : KodSetEnv PHP_VER 5_...   5.07.2011, 07:30:19
- - edzio_max   Mam mały problemik z klasą, mianowicie Jak zmieni...   12.07.2011, 16:56:49
- - pawel.ad   Hej Dzięki wielkie za pager - działa świetnie. Ma...   11.08.2011, 12:40:53
- - nospor   $pager->SetUseSession(false);   11.08.2011, 12:42:50
- - pawel.ad   Dziękuje bardzo   11.08.2011, 12:54:23
- - Sobak   Witam, na wstępie gratuluję klasy - fajnie się z ...   27.01.2013, 09:34:32
- - nospor   [PHP] pobierz, plaintext /** * Zwraca tablicę p...   28.01.2013, 08:56:47
- - Sobak   Tak... Zauważyłem to oczywiście po napisaniu poprz...   2.02.2013, 09:42:02
- - pionas   A da się tak zrobić aby wyświetlało kilka pierwszy...   13.02.2013, 09:39:18
- - nospor   Mój kod zwraca pager w postaci jak pokazałeś. Ale ...   13.02.2013, 10:01:58
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: 29.06.2025 - 03:53