* @package framework * @version $Id: pager.class.php 134 2010-09-11 07:24:27Z wwccss $ * @link http://www.zentao.net */ /** * Pager class. * * @package framework */ class pager { /** * The default counts of per page. * * @public int */ const DEFAULT_REC_PRE_PAGE = 20; /** * The total counts. * * @var int * @access public */ public $recTotal; /** * Record count per page. * * @var int * @access public */ public $recPerPage; /** * Page count. * * @var string * @access public */ public $pageTotal; /** * Current page id. * * @var string * @access public */ public $pageID; /** * The global $app. * * @var object * @access private */ private $app; /** * The global $lang. * * @var object * @access private */ private $lang; /** * Current module name. * * @var string * @access private */ private $moduleName; /** * Current method. * * @var string * @access private */ private $methodName; /** * The params. * * @private array */ private $params; /** * The construct function. * * @param int $recTotal * @param int $recPerPage * @param int $pageID * @access public * @return void */ public function __construct($recTotal = 0, $recPerPage = 20, $pageID = 1) { $this->setRecTotal($recTotal); $this->setRecPerPage($recPerPage); $this->setPageTotal(); $this->setPageID($pageID); $this->setApp(); $this->setLang(); $this->setModuleName(); $this->setMethodName(); } /** * The factory function. * * @param int $recTotal * @param int $recPerPage * @param int $pageID * @access public * @return object */ public function init($recTotal = 0, $recPerPage = 20, $pageID = 1) { return new pager($recTotal, $recPerPage, $pageID); } /** * Set the recTotal property. * * @param int $recTotal * @access public * @return void */ public function setRecTotal($recTotal = 0) { $this->recTotal = (int)$recTotal; } /** * Set the recTotal property. * * @param int $recPerPage * @access public * @return void */ public function setRecPerPage($recPerPage) { if($recPerPage != '全部') { $this->recPerPage = $recPerPage; //($recPerPage > 0) ? $recPerPage : PAGER::DEFAULT_REC_PRE_PAGE; } else { $this->recPerPage = $this->recTotal; } } /** * Set the pageTotal property. * * @access public * @return void */ public function setPageTotal() { $this->pageTotal = ($this->recPerPage > 0) ? ceil($this->recTotal / $this->recPerPage) : 1; } /** * Set the page id. * * @param int $pageID * @access public * @return void */ public function setPageID($pageID) { if($pageID > 0 and $pageID <= $this->pageTotal) { $this->pageID = $pageID; } else { $this->pageID = 1; } } /** * Set the $app property; * * @access private * @return void */ private function setApp() { global $app; $this->app = $app; } /** * Set the $lang property. * * @access private * @return void */ private function setLang() { global $lang; $this->lang = $lang; } /** * Set the $moduleName property. * * @access private * @return void */ private function setModuleName() { $this->moduleName = $this->app->getModuleName(); } /** * Set the $methodName property. * * @access private * @return void */ private function setMethodName() { $this->methodName = $this->app->getMethodName(); } /** * Get recTotal, recPerpage, pageID from the request params, and add them to params. * * @access private * @return void */ private function setParams() { $this->params = $this->app->getParams(); foreach($this->params as $key => $value) { if(strtolower($key) == 'rectotal') $this->params[$key] = $this->recTotal; if(strtolower($key) == 'recperpage') $this->params[$key] = $this->recPerPage; if(strtolower($key) == 'pageID') $this->params[$key] = $this->pageID; } } /** * Create the limit string. * * @access public * @return string */ public function limit() { $limit = ''; if($this->pageTotal > 1) $limit = ' limit ' . ($this->pageID - 1) * $this->recPerPage . ", $this->recPerPage"; return $limit; } /** * Print the pager's html. * * @param string $align * @param string $type * @access public * @return void */ public function show($align = 'right', $type = 'full') { echo $this->get($align, $type); } /** * Get the pager html string. * * @param string $align * @param string $type the pager type, full|short|shortest * @access public * @return string */ public function get($align = 'right', $type = 'full') { /* If the RecTotal is zero, return with no record. */ if($this->recTotal == 0) { return "