Skip to content
This repository
Fetching contributors…

Cannot retrieve contributors at this time

file 161 lines (149 sloc) 4.173 kb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161
<?php
/**
* CPagination class file.
*
* @author Qiang Xue <qiang.xue@gmail.com>
* @link http://www.yiiframework.com/
* @copyright Copyright &copy; 2008-2009 Yii Software LLC
* @license http://www.yiiframework.com/license/
*/

/**
* CPagination represents information relevant to pagination.
*
* When data needs to be rendered in multiple pages, we can use CPagination to
* represent information such as {@link getItemCount total item count},
* {@link getPageSize page size}, {@link getCurrentPage current page}, etc.
* These information can be passed to {@link CBasePager pagers} to render
* pagination buttons or links.
*
*
* @author Qiang Xue <qiang.xue@gmail.com>
* @version $Id$
* @package system.web
* @since 1.0
*/
class CPagination extends CComponent
{
/**
* The default page size.
*/
const DEFAULT_PAGE_SIZE=10;
/**
* @var string name of the GET variable storing the current page index. Defaults to 'page'.
*/
public $pageVar='page';
/**
* @var string the route (controller ID and action ID) for displaying the paged contents.
* Defaults to empty string, meaning using the current route.
*/
public $route='';

private $_pageSize=self::DEFAULT_PAGE_SIZE;
private $_itemCount=0;
private $_currentPage;

/**
* Constructor.
* @param integer total number of items.
* @since 1.0.1
*/
public function __construct($itemCount=0)
{
$this->setItemCount($itemCount);
}

/**
* @return integer number of items in each page. Defaults to 10.
*/
public function getPageSize()
{
return $this->_pageSize;
}

/**
* @param integer number of items in each page
*/
public function setPageSize($value)
{
if(($this->_pageSize=$value)<=0)
$this->_pageSize=self::DEFAULT_PAGE_SIZE;
}

/**
* @return integer total number of items. Defaults to 0.
*/
public function getItemCount()
{
return $this->_itemCount;
}

/**
* @param integer total number of items.
*/
public function setItemCount($value)
{
if(($this->_itemCount=$value)<0)
$this->_itemCount=0;
}

/**
* @return integer number of pages
*/
public function getPageCount()
{
return (int)(($this->_itemCount+$this->_pageSize-1)/$this->_pageSize);
}

/**
* @param boolean whether to recalculate the current page based on the page size and item count.
* @return integer the zero-based index of the current page. Defaults to 0.
*/
public function getCurrentPage($recalculate=true)
{
if($this->_currentPage===null || $recalculate)
{
if(isset($_GET[$this->pageVar]))
{
$this->_currentPage=(int)$_GET[$this->pageVar]-1;
$pageCount=$this->getPageCount();
if($this->_currentPage>=$pageCount)
$this->_currentPage=$pageCount-1;
if($this->_currentPage<0)
$this->_currentPage=0;
}
else
$this->_currentPage=0;
}
return $this->_currentPage;
}

/**
* @param integer the zero-based index of the current page.
*/
public function setCurrentPage($value)
{
$this->_currentPage=$value;
$_GET[$this->pageVar]=$value+1;
}

/**
* Creates the URL suitable for pagination.
* This method is mainly called by pagers when creating URLs used to
* perform pagination. The default implementation is to call
* the controller's createUrl method with the page information.
* You may override this method if your URL scheme is not the same as
* the one supported by the controller's createUrl method.
* @param CController the controller that will create the actual URL
* @param integer the page that the URL should point to. This is a zero-based index.
* @return string the created URL
*/
public function createPageUrl($controller,$page)
{
$params=($this->route==='')?$_GET:array();
if($page>0) // page 0 is the default
$params[$this->pageVar]=$page+1;
else
unset($params[$this->pageVar]);
return $controller->createUrl($this->route,$params);
}

/**
* Applies LIMIT and OFFSET to the specified query criteria.
* @param CDbCriteria the query criteria that should be applied with the limit
* @since 1.0.1
*/
public function applyLimit($criteria)
{
$criteria->limit=$this->pageSize;
$criteria->offset=$this->currentPage*$this->pageSize;
}
}
Something went wrong with that request. Please try again.