Splodzilem nowa, mala, klase sluzaca do przestawiania pagera.
Oto jej kod zrodlowy:
<?php class Pager { private $total; private $current; private $pageHandler; 'main' => '<a href="%s">%d</a>', // glowny link 'mainActive' => '<b>%d</b>', // numer aktualnej strony 'begin' => '<a href="%s">|<</a>', // powrot na poczatek 'beginUnActive' => '|<', // nieaktywny powrot na poczatek 'end' => '<a href="%s">>|</a>', // przeskok na koniec 'endUnActive' => '>|', // nieaktywny przeskok na koniec 'next' => '<a href="%s">>></a>', // nastepna strona 'nextUnActive' => '>>', // nieaktywna nastepna strona 'previous' => '<a href="%s"><<</a>', // poprzednia strona 'previousUnActive' => '<<', // nieaktywna poprzednia strona 'pause' => '...', // pauza miedzy czescia lewa, glowna, prawa 'separator' => ' ' // separator poszczegolnych elementow ); 'leftShift' => 2, // wypisywanie x liczb z poczatku 'mainShift' => 3, // wypisywanie x liczb z lewej i prawej strony aktualnej 'rightShift' => 2 // wypisywanie x liczb na koncu ); public function __construct($total, $pageHandler = 'page') { $current = 1; $current = $total; else $current = (int)$_GET[$pageHandler]; $this->total = $total; $this->current = $current; $this->pageHandler = $pageHandler; } private function replacePage($new) { return str_replace($this->pageHandler."=".$this->current, $this->pageHandler."=".$new, $_SERVER['REQUEST_URI']); return $_SERVER['REQUEST_URI']."?".$this->pageHandler."=".$new; else return $_SERVER['REQUEST_URI']."&".$this->pageHandler."=".$new; } public function createPager() { if ($this->config['leftShift'] + $this->config['mainShift'] + $this->config['rightShift'] >= $this->total) for ($i = 1; $i <= $this->total; $i++) else { $pauseBefore = $pauseAfter = FALSE; $left = 1 + $this->config['leftShift'];; $mainLeft = ($this->current - $this->config['mainShift'] >= 1) ? $this->current - $this->config['mainShift'] : 1; $mainRight = ($this->current + $this->config['mainShift'] <= $this->total) ? $this->current + $this->config['mainShift'] : $this->total; $right = $this->total - $this->config['rightShift']; $start = ($right < $mainRight) ? $mainRight + 1 : $right + 1; $stop = ($left >= $mainLeft) ? $mainLeft : $left; for ($i=1; $i<$stop; $i++) { $pauseBefore = TRUE; } if ($pauseBefore == TRUE) for ($i = $mainLeft; $i<=$mainRight; $i++) for ($i=$start; $i <= $this->total; $i++) { $pauseAfter = TRUE; } if ($pauseAfter != TRUE) } } } ?>
Chcialem, aby calosc byla jak najprostsza w pozniejszym uzyciu i tak wykorzystanie klasy sprowadza sie do:
<?php $pager = new Pager(20); ?>
Pierwszym parametrem jest liczba wszystkich stron, drugi (opcjonalny) parametr to zmienna sluzaca do przechowywania numeru strony (domyslnie: page).
Klasa generuje 2 rodzaje pagera:
- jesli liczba stron jest mniejsza od sumy zakresow z configa:
|< << 1 2 3 4 5 6 >> >|
- lub w przeciwnym wypadku ucina liste (wyobrazmy sobie np. wypisane jak powyzej linki np. do 100 stron

|< << 1 2 ... 9 10 11 12 13 14 15 ... 19 20 >> >|
Prosilbym o ocene tej klasy (dopiero zaczynam przygode z OOP) oraz o pomoc: w momencie gdy recznie w adresie przegladarki ustalimy page na wieksza niz podana w konstruktorze skrypt zachowuje sie dziwnie: kazdy link prowadzi do tejze podstrony... Przeciez jest warunek w konstruktorze... Poza tam odwolanie do $_GET jest tylko w 1 miejscu. Prosilbym o spojrzenie na ten bug... Z gory dzieki!
