class CleverPager { // SQL prikaz pro vyber dat pred strankovanim, // nesmi pouzivat LIMIT public $SelectCommand; // SQL prikaz na vypocitani poctu zaznamu lze nechat // nenastaveny, v tom pripade se vygeneruje v metode DataBind public $CountCommand; // Pocet zaznamu na strance public $PageSize = 1; // Parametr URL, ze ktereho se cte cislo akt. stranky public $UrlParameterName; // atribut ID, ktery bude mit div kolem pageru public $PagerID = "PagerId"; // atribut Class, ktery bude mit div kolem pageru public $PagerCssClass = "PagerClass"; // zarovnani - hodnota text-align v atributu style, // hodnota inherit znamena, ze div tento atribut // vubec mit nebude public $PagerAlign = "inherit"; // pocet cisel okolnich stranek, ktere se zobrazi // hodnota -1 znamena, ze se zobrazi vsechny // hodnota 0 znamena zadne public $PageLinksDisplayed = -1; // priznak zobrazovani tlacitek predchozi a nasledujici stranky public $ShowPrevNext = 1; // priznak zobrazovani tlacitek prvni a posledni stranky public $ShowFirstLast = 1; // text odkazu na prvni stranku public $FirstPage = "<<"; // text odkazu na posledni stranku public $LastPage = ">>"; // text odkazu na predchozi stranku public $PrevPage = "<"; // text odkazu na nasledujici stranku public $NextPage = ">"; // css tridy, ktere budou mit jednotlive odkazy na stranky public $LinkCssClass; public $FirstCssClass; public $LastCssClass; public $NextCssClass; public $PrevCssClass; public $CurrentPageCssClass; // aktualni stranka private $_targetedPage = 2; // pocet stranek private $_pageCount = 0; // Zde bude vysledkova sada po zavolani DataBind private $ResultSet = NULL; // priznak prvniho parametru, nedulezite private $first = 0; // konstruktor - parametry jsou SQL prikaz na vyber vysledkove // sady a parametr URL, ve kterem bude cislo aktualni stranky public function __construct( $SelectCommand, $UrlParameterName) { $this->SelectCommand = $SelectCommand; $this->UrlParameterName = $UrlParameterName; } // Spocita pocet zaznamu a z atributu _pageCount, // PageSize a _targetedPage vybere pozadovanou stranku public function DataBind() { // priprava prikazu pro spocitani zaznamu, // pokud nebyl zadan zvenci if (!$this->CountCommand || $this->CountCommand == "") { $this->CountCommand = preg_replace( '@SELECT (.*) FROM@', 'SELECT COUNT(*) AS Count FROM', $this->SelectCommand); } //zjisteni cisla aktualni stranky if (isset($_GET[$this->UrlParameterName])) $this->_targetedPage = (int)($_GET[$this->UrlParameterName]); else $this->_targetedPage = 1; if ($this->_targetedPage == 0) $this->_targetedPage = 1; //zjisteni poctu zaznamu $c = (mysql_fetch_object( mysql_query($this->CountCommand))); //vypocet poctu stranek $this->_pageCount = (int) (($c->Count + $this->PageSize - 1) / $this->PageSize); if ($this->_targetedPage > $this->_pageCount) $this->_targetedPage = 1; //vypocet parametru pro LIMIT $firstrow = ($this->_targetedPage - 1) * $this->PageSize; $this->ResultSet = mysql_query("$this->SelectCommand ". " LIMIT $firstrow, $this->PageSize" ); } // postupne vraci radky vysledkove sady, // po zavolani DataBind public function GetOne() { return mysql_fetch_object($this->ResultSet); } //pomocna metoda pro vytvoreni odkazu private function prepareLink( $prefix, $page, $anchoringText, $cssClass) { if ($page != $this->_targetedPage) { if ($page == 1) $h = $prefix; else { if ($this->first) $h = $prefix."?".$this->UrlParameterName."=".$page; else $h = $prefix."&".$this->UrlParameterName."=".$page; } if ($cssClass != "" && $cssClass) $css = " class=\"$cssClass\"" ; else $css=""; return "$anchoringText "; } else { if ($this->CurrentPageCssClass && $this->CurrentPageCssClass != "") { echo "CurrentPageCssClass\">"; echo $anchoringText; echo " "; } else echo $anchoringText." "; } } // vypise pager do tela stranky public function DrawPager() { //analyza url $hrefprefix = $_SERVER['SCRIPT_NAME']; $this->first=1; foreach ( $_GET as $key=>$value) { if ($key == $this->UrlParameterName) continue; if ($this->first) { $hrefprefix .= "?".$key."=".$value; $this->first = 0; } else $hrefprefix .= "&".$key."=".$value; } //vykresleni div tagu kolem pageru s odpovidajicimi atributy if ($this->PagerID && $this->PagerID != "") $id = " id=\"$this->PagerID\""; else $id =""; if ($this->PagerCssClass && $this->PagerCssClass != "") $class = " class=\"$this->PagerCssClass\""; else $class = ""; if ($this->PagerAlign != "inherit") $align = " style=\"text-align: $this->PagerAlign\""; else $align =""; echo "