Pager

Klasa Pager jak sama nazwa wskazuje służy do zarządzania stronicowaniem. Klasa pobiera aktualną stronę na której jesteśmy i na tej podstawie mówi nam, z jakiego zakresu pobrać mamy interesujące nas dane. Dodatkowo klasa generuje kod html będący reprezentacją linków do kolejnych stron. Możemy oczywiście sami stworzyć swój własny html. Od wersji 2.5 istnieje mozliwość zapamiętania parametrów wywołania strony.

Narazie napiszę tylko tyle. Więcej na temat klasy możecie dowiedzieć się na forum php.pl lub z artykułów. Klasa jest do pobrania tutaj.

Changelog

  • 2007-07-26 Pager 2.5
    • Brak kompatybilności wstecz przy niektórych metodach
    • Rozbicie metody Render() na dwie metody: Make() i Render()
    • Zapamiętywanie w linkach parametrów w wywołaniu strony
  • 2006-08-22 Pager 2.02
    • poprawa drobnego błędu przy wyświetlaniu x stron do przodu/tyłu
  • 2006-08-22 Pager 2.01
    • Jeśli drugi parametr wywołania konstruktora będzie zawierał ciąg #PAGE#, to link ten zostanie niezmieniony, czyli bedzie tak jak user podał, za wyjatkiem #PAGE#, które zostanie zamienione na numer strony. Przydatne chociażby do "nice urls".
    • * Metoda Render() może zwracać teraz tablicę pagera zamiast kodu html. Należy ustawic na true jej trzeci parametr.

Komentarze

 

2008-10-29 12:01 gość_Mike

Mam pytanie - w treści wywołania klasy, we fragmencie:
try{ 
    $pager = new Pager('idPagera'); 
    $pager->SetTotalRecords($recordsCount); 
    $pager->Make(true); 
    $pager->pageLink(true); 
    $pag = $pager->Render(); 
    $start = $pager->GetIndexRecordStart(); 
    $end = $pager->GetIndexRecordEnd(); 
}
jak mogę dołączyć link do klasy - chodzi mi o to, aby w moim przypadku link do nastepnej strony wyników wyglądał tak: ?lista_art&pageppid=2. Czyli jak dołączyć link z zewnątrz?

2008-10-29 12:13 nospor

<?php 
 $pager = new Pager('idPagera','?lista_art&pageppid=#PAGE#'); 
?>

2008-10-29 12:27 gość_Mike

To się nazywa błyskawiczna odpowiedź - dziękasy

2010-09-05 12:43 gość_marian

Jaka może być przyczyna odwrotnego zaznaczenia aktualnej strony? tzn. Gdy wywoluje stronę po raz pierwszy jako aktualną stronę zaznaczona jest strona ostatnia. Co może być przyczyną?

2010-09-05 14:27 Michał

Zapamiętywanie stanu w sesji dodaj $pager -> SetUseSession( false );

2010-09-05 15:09 gość_marian

To nie sesja. Problem tkwił w konflikcie nazw zmiennych. id strony pobierałem z url za pomocją parametru http://strona.pl/index.php?page=12

2011-08-06 09:35 gość_mirek

Do czego jest idPagera? Moim zdaniem jest to zbędne

2011-08-06 20:16 nospor

Jakbyś używał na stronie więcej pagerów niż jednego to byś zmienił zdanie

2014-07-07 09:35 gość_Art

Czy istnieje jakiś sposób aby wyciągnąć ilość wszystkich stron?
Chciałbym stworzyć sobie taki napis dodatkowo "znalezionych: X rekordów na Y stronach"

2014-07-07 10:28 nospor

$pager->GetTotalPages()

2014-07-10 11:20 gość_Art

Jest jeszcze jedno co mnie zastanawia separatorem między są 2 znaki &amp;#160; &#160;'

2014-07-10 11:28 gość_Art

ops kliknąłem nie w to co potrzeba i ucięło.

Jest jeszcze jedno co mnie zastanawia, separatorem między są 2 znaki &amp;#160; tylko w ostatnim elemencie występują po nim i przed > czyli razem 4 x &amp;#160; robi się widocznie większy odstęp wtedy między ostatnią cyfrą widoczną w pasku nawigatora a '>'.
Jak to naprawić?

2014-07-10 11:38 gość_Art

jedyne co mi przyszło do głowy na szybko to stworzenie nowej zmiennej $sep2
$sep2='';
$_str .= $sep2.$this->createHTMLLink('Następna strona', $this->array[self::GOTO_NEXT][self::LINK], '>');

2014-07-10 11:46 nospor

Jak nie chcesz tych separatorow to je poprostu wywal.
Poza tym w przykladach dołączonych w paczce pokazalem jak robic wlasny wyglad pagera bez zmieniania kodu w klasie

2015-03-29 09:47 gość_Janko

Co zrobić aby mój link do kolejnych stron wyglądał tak id=2&s=nr_strony i pobierał prawidłowo dane?

zrobiłem tak:
$rid = $_GET['id'];
$sql = 'select count(*) from tabela where rid= '.$rid;
$result = mysql_query($sql);
$row = mysql_fetch_array($result);
$recordsCount = $row[0];//pobranie liczby rekordów
try{
	$pager = new Pager('page','?id='.$rid.'&s=#PAGE#');
        $pager->SetRecordsPerPage(10);
	$pager->SetTotalRecords($recordsCount);
	$pager->Make(true);
	$pag = $pager->Render();
	$start = $pager->GetIndexRecordStart();
	$end = $pager->GetIndexRecordEnd();
}
# zapytanie pobierające dane
$query='select pole from tabela where rid='.$rid.' limit '.$start.','.($end - $start + 1);


ale nie działa, zawsze pokazuje pierwsze 10 rekordów

2015-03-29 11:09 nospor

A gdy klikniesz na strone 2 to na jaki DOKLADNIE link cie przekierowuje?

2015-03-29 11:11 nospor

No ale moment...
&s=#PAGE#'
skad klasa ma wiedziec, ze teraz numer strony zapisujesz pod s... masz to jej powiedziec, a najlepiej zrob tak
$pager = new Pager('page','?id='.$rid.'&page=#PAGE#', true);

2015-03-30 06:45 gość_Janko

Dzięki zadziałało, czy istnieje jakiś sposób żeby np od 100 strony pagera pokazywało się 5 stron (2 wstecz, 2 do przodu, i aktualna) stron a poniżej 100 - 11 stron (5 wstecz 5 do przodu i aktualna) ?

2015-03-30 07:40 nospor

funkcją SetPagesPerNav() ustawia liczbe strona w nawigatorze. Teraz w zaleznosci od strony na ktorej jestes ustawiasz 10 albo 5.
Ale to jest totalnie bez sensu moim zdaniem takie kombinowanie...

2015-03-30 16:20 gość_Janko

dzięki, a jaka funkcja pokazuje aktualną stronę w nawigatorze?

zrobię to na ifach

jak masz w nawigatorze koło 15000 stron to nie zawsze mieści się 10 w jednej linii dlatego chce zrobić do pewnego momentu po 10 a powyżej tylko 5

2015-03-30 16:20 gość_Janko

dzięki, a jaka funkcja pokazuje aktualną stronę w nawigatorze?

zrobię to na ifach

jak masz w nawigatorze koło 15000 stron to nie zawsze mieści się 10 w jednej linii dlatego chce zrobić do pewnego momentu po 10 a powyżej tylko 5

2015-03-30 17:28 nospor

dzięki, a jaka funkcja pokazuje aktualną stronę w nawigatorze?
Zajrzyj do klasy Pager. Tam masz napisane

2015-03-31 06:37 gość_Janko

Chyba nic mi z tego nie wyjdzie, jak daje:
$pager = new Pager('page','?id='.$rid.'&page=#PAGE#', true);
$pager->SetRecordsPerPage(10);
  if($pager->GetActualPage() <=100){$pager->SetPagesPerNav(10);}
  else{$pager->SetPagesPerNav(5);}
$pager->SetTotalRecords($recordsCount);
$pager->Make(true);
$pag = $pager->Render();
$start = $pager->GetIndexRecordStart();
$end = $pager->GetIndexRecordEnd();
zwraca
Method SetPagesPerNav() You must call before Make()
jak daje przed Make() zwraca
Method GetActualPage() You must call after Make()

2015-03-31 07:59 nospor

GetProbablyActualPage()

2015-04-01 17:00 gość_Janko

Dziękuje działa

2015-06-04 13:13 artur

Klasa działa bardzo fajnie, tylko jak mogę do niej dorobić licznik pobranych elementów aby w każdym wierszu tabeli pokazywało nr wiersza?

niby udało mi się aby pokazywało 1,2,3.... 10 ale na 2 stronie liczy z powrotem od 1 a nie od 11

2015-06-04 14:39 artur

Dobra chyba mi się udało, zrobiłem
$i=$start;    
    foreach ($wynik as $r){
        $i++;
        echo $i;
    }

2016-06-04 15:16 gość_Chris

Jest jakiś prosty sposób, by ustawić inną liczbę rekordów na pierwszej stronie i inną na kolejnych? Poniższy sposób niby działa, ale na drugiej stronie brakuje pierwszych 12 rekordów.

if ($_GET['s'] == 1) {$pager->RecordsPerPage = 12;} else { $pager->RecordsPerPage =24;}

2016-06-04 16:32 gość_Chris

Mam Pierwsza strona to 6 rekordów, pozostałe po 12 - zgodnie z deklaracją wcześniej $pager->RecordsPerPage = 12;

if ($_GET['s'] == '1') {$start = $pager->GetIndexRecordStart(); $end = $pager->GetIndexRecordEnd()-6;} else {$start = $pager->GetIndexRecordStart()-6; $end = $pager->GetIndexRecordEnd();}

2016-07-19 06:50 gość_Adrian

Cześć,

super klasa, po dłuższym jej użytkowaniu dopiero wczoraj dostałem zgłoszenie z pewnym problem...
Po analizie doszedłem do pewnego błędu.
if ($this->indexRecordEnd + 1 > $this->totalRecords)
$this->indexRecordEnd = $this->totalRecords - 1;
tu nie powinno być
$this->indexRecordEnd = $this->totalRecords;

gdy miałem 1 rekord wyników to GetIndexRecordStart oraz GetIndexRecordEnd dawało 0...

sprawdź proszę

2016-07-19 10:10 nospor

gdy miałem 1 rekord wyników to GetIndexRecordStart oraz GetIndexRecordEnd dawało 0...

No i prawidlowo, tyle wlasnio mialo dawac. Widac, zle korzystasz z tych indeksow

Dodaj komentarz

 

Dostępne bbcode: b, u, i, url, code, php, css, html, sql, js

Ostatnio komentowane

  1. ShoutBox nospor
  2. ShoutBox Rafał
  3. ShoutBox nospor
  4. ShoutBox Rafał
  5. ShoutBox nospor
  6. ShoutBox Artur
  7. PHP South Coast conf... nospor

Skrypty użytkowników

  1. Klasa obsługi szablo... Lirdoner
  2. Sekcje user76
  3. Klasa walidująca for... user76
  4. Licznik Gości online korey
  5. Form Builder Comandeer
  6. Dynamiczny licznik z... korey
  7. Captcha Comandeer