Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

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





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 (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
12 Stron V  « < 10 11 12  
Start new topic
Odpowiedzi (220 - 233)
nospor
post
Post #221





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Nie wiem jak ci to wytłumaczyć....

$pager->SetActualPage(TU MASZ WSTAWIĆ LICZBĘ! TĄ LICZBĄ JEST WARTOŚĆ PAGE);

Generujesz taki url: $url/cars/komis/page/#PAGE#

W jego wyniku załóżmy masz taki link dla strony nr 2:
http://blabla/cars/komis/page/2

No i teraz Twój ruter przetwarza ten link i wie, że cars i komis to jakaś tam akcja oraz gdzieś przechowuje parametr page. To ty powinieneś wiedzieć skąd ten parametr wziąść bo ty wiesz jaki masz ruter do adresów a nie ja.

Cytat
dzie $webid['4'] zawiera aktualny numer strony i nie działa
Jeśli to $webid['4'] zawiera wartość parametru page z linku to masz wstawić tak:
$pager->SetActualPage($webid['4']);
Go to the top of the page
+Quote Post
northwest
post
Post #222





Grupa: Zarejestrowani
Postów: 788
Pomógł: 1
Dołączył: 17.09.2004

Ostrzeżenie: (10%)
X----


super,działa (IMG:style_emoticons/default/smile.gif) )) dzięki:)
Go to the top of the page
+Quote Post
JamalBIG
post
Post #223





Grupa: Zarejestrowani
Postów: 496
Pomógł: 1
Dołączył: 16.01.2008
Skąd: Świnoujście

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


Witam

Może mi ktoś podpowiedzieć jak pozbyć się błędu:
  1. Parse error: syntax error, unexpected '{' in /homez.184/domciu/www/funcs/ogloszenia/kategorie.php on line 87

Wyskakuje mi to po wgraniu na serwer ovh (na innych serwerach nie ma problemu) - fragment kodu to:
  1. try{
  2. $pager_promowane = new Pager('promowane');
  3. $pager_promowane->SetTotalRecords($recordsCount_promowane);
  4. $pager_promowane->Make(true);
  5. $pag_promowane = $pager_promowane->Render();
  6. $start_promowane = $pager_promowane->GetIndexRecordStart();
  7. $end_promowane = $pager_promowane->GetIndexRecordEnd();
  8. }
  9. catch (Exception $e) {
  10. echo $e->getMessage();
  11. }

Błąd odnosi się do linijki 'try{'

Z góry dziękuję za pomoc
Pozdrawiam
Go to the top of the page
+Quote Post
nospor
post
Post #224





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Odpalasz to na php4 a powinienes na php5
Go to the top of the page
+Quote Post
melkorm
post
Post #225





Grupa: Zarejestrowani
Postów: 1 366
Pomógł: 261
Dołączył: 23.09.2008
Skąd: Bydgoszcz

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


W pliku .htaccess:

Dla 5.3 :
Kod
SetEnv PHP_VER 5_TEST


dla 5.x - nie pamiętam dokładnie jaka wersja
Kod
SetEnv PHP_VER 5

Go to the top of the page
+Quote Post
edzio_max
post
Post #226





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 31.10.2010

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


Mam mały problemik z klasą, mianowicie

Jak zmienić ustawieni linku pagera.

Chodzi mi o to że adres w aktualnościach mam /nowosci/strona/numerstrony z tego sobie wyjmuje id strony działa

Lecz nie wiem ja zrobić aby pager w linku nie dawał idPagera=strona tylko /nowosci/strona/numerstrony

Byłbym wdzięczny za pomoc

Dziękuje

//edit

udąło mi się to zrobić (IMG:style_emoticons/default/smile.gif)

Ten post edytował edzio_max 12.07.2011, 20:34:48
Go to the top of the page
+Quote Post
pawel.ad
post
Post #227





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 8.03.2010
Skąd: Zielona Góra

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


Hej

Dzięki wielkie za pager - działa świetnie. Mam tylko jedno małe pytanie: jak wyłączyć zapamiętanie ostatniej strony?
Bo działa to tak że przeglądam archiwum newsów, przechodzę na inną stronę i kiedy wracam do strony news, zamiast być na pierwszej stronie i patrzeć na najnowsze newsy, to jestem tam gdzie ostatnio czyli np. na stronie 3.
Go to the top of the page
+Quote Post
nospor
post
Post #228





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




$pager->SetUseSession(false);
Go to the top of the page
+Quote Post
pawel.ad
post
Post #229





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 8.03.2010
Skąd: Zielona Góra

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


Dziękuje bardzo (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Sobak
post
Post #230





Grupa: Zarejestrowani
Postów: 21
Pomógł: 4
Dołączył: 26.04.2011
Skąd: Olsztyn

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


Witam,

na wstępie gratuluję klasy - fajnie się z nią pracuje, ułatwia robotę, tak jak być powinno.

Odnoszę jednak wrażenie, że znalazłem błąd. Otóż zależało mi na uzyskaniu tablicy pagera, żeby móc dokonać obróbki po swojej stronie. Lekko zmyliły mnie informacje zawarte w tym temacie (może warto wrzucić najnowsze informacje na górę pierwszego posta? [tak, wiem, to dodatkowa robota dla Ciebie]).

W każdym razie, w końcu doszedłem do tego, że tablica pagera ma być zwracana przez metodę Make(). Zrobiłem var_dump na wyniku jej działania i otrzymałem... true (IMG:style_emoticons/default/smile.gif)

Bez zbędnego przeciągania:
  1. // końcówka metody Make()
  2. return $this->toArray();
  3.  
  4. // Ok, w związku z tym poszedłem pod wskazany adres i ujrzałem to:
  5. // końcówka metody toArray()
  6. return true;


Wystarczyło oczywiście zamienić na:
  1. return $this->array;

i działa ładnie.

Jeśli źle zrozumiałem zasadę działania klasy i narobiłem niepotrzebnego zamieszania, to przepraszam (IMG:style_emoticons/default/biggrin.gif) będę jednak wdzięczny za wyjaśnienie co w takim wypadku robiłem źle.
Go to the top of the page
+Quote Post
nospor
post
Post #231





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




  1. /**
  2. * Zwraca tablicę pager'a
  3. *
  4. * @return array
  5. */
  6. public function GetArray() {
  7. if (is_null($this->indexRecordStart))
  8. throw new Exception(sprintf($this->errorMsg['call_get'],'GetArray'));
  9. return $this->array;
  10. }

I myślę że już nic więcej tłumaczyć nie muszę (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Sobak
post
Post #232





Grupa: Zarejestrowani
Postów: 21
Pomógł: 4
Dołączył: 26.04.2011
Skąd: Olsztyn

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


Tak... Zauważyłem to oczywiście po napisaniu poprzedniego posta i w momencie, w którym nie miałem przez kilka dni dostępu do internetu. Teraz jedynie zastanawiam się, gdzie przeczytałem informację, że tę tablicę powinna zwracać metoda Make(). Pewnie odnosiło się to do innej wersji lub mam już urojenia - no nieważne - dziękuję za odpowiedź tak czy siak (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
pionas
post
Post #233





Grupa: Zarejestrowani
Postów: 70
Pomógł: 2
Dołączył: 25.03.2009
Skąd: Pionki

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


A da się tak zrobić aby wyświetlało kilka pierwszych stron i kilka ostatnich?
Bo teraz mam coś takiego:
1 2 3 4 5 6 7 8 9 10 11 > >> >|

A chciałbym:
1 2 3 4 5 ... 48 49 50 51 52
Go to the top of the page
+Quote Post
nospor
post
Post #234





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Mój kod zwraca pager w postaci jak pokazałeś.
Ale zwraca też tablicę, której są różne informacje, jak np. liczba stron. Mając te dane, może sobie wyświetlać strony jak ci się podoba.
Go to the top of the page
+Quote Post

12 Stron V  « < 10 11 12
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: 26.08.2025 - 00:11