CPagination
Package | system.web |
---|---|
Inheritance | class CPagination » CComponent |
Since | 1.0 |
Source Code | framework/web/CPagination.php |
When data needs to be rendered in multiple pages, we can use CPagination to represent information such as total item count, page size, current page, etc. These information can be passed to pagers to render pagination buttons or links.
Example:
Controller action:
function actionIndex(){ $criteria=new CDbCriteria(); $count=Article::model()->count($criteria); $pages=new CPagination($count); // results per page $pages->pageSize=10; $pages->applyLimit($criteria); $models=Article::model()->findAll($criteria); $this->render('index', array( 'models' => $models, 'pages' => $pages )); }
View:
<?php foreach($models as $model): ?> // display a model <?php endforeach; ?> // display pagination <?php $this->widget('CLinkPager', array( 'pages' => $pages, )) ?>
Public Properties
Property | Type | Description | Defined By |
---|---|---|---|
currentPage | integer | the zero-based index of the current page. | CPagination |
itemCount | integer | total number of items. | CPagination |
limit | integer | the limit of the data. | CPagination |
offset | integer | the offset of the data. | CPagination |
pageCount | integer | number of pages | CPagination |
pageSize | integer | number of items in each page. | CPagination |
pageVar | string | name of the GET variable storing the current page index. | CPagination |
params | array | of parameters (name=>value) that should be used instead of GET when generating pagination URLs. | CPagination |
route | string | the route (controller ID and action ID) for displaying the paged contents. | CPagination |
validateCurrentPage | boolean | whether to ensure currentPage is returning a valid page number. | CPagination |
Public Methods
Method | Description | Defined By |
---|---|---|
__call() | Calls the named method which is not a class method. | CComponent |
__construct() | Constructor. | CPagination |
__get() | Returns a property value, an event handler list or a behavior based on its name. | CComponent |
__isset() | Checks if a property value is null. | CComponent |
__set() | Sets value of a component property. | CComponent |
__unset() | Sets a component property to be null. | CComponent |
applyLimit() | Applies LIMIT and OFFSET to the specified query criteria. | CPagination |
asa() | Returns the named behavior object. | CComponent |
attachBehavior() | Attaches a behavior to this component. | CComponent |
attachBehaviors() | Attaches a list of behaviors to the component. | CComponent |
attachEventHandler() | Attaches an event handler to an event. | CComponent |
canGetProperty() | Determines whether a property can be read. | CComponent |
canSetProperty() | Determines whether a property can be set. | CComponent |
createPageUrl() | Creates the URL suitable for pagination. | CPagination |
detachBehavior() | Detaches a behavior from the component. | CComponent |
detachBehaviors() | Detaches all behaviors from the component. | CComponent |
detachEventHandler() | Detaches an existing event handler. | CComponent |
disableBehavior() | Disables an attached behavior. | CComponent |
disableBehaviors() | Disables all behaviors attached to this component. | CComponent |
enableBehavior() | Enables an attached behavior. | CComponent |
enableBehaviors() | Enables all behaviors attached to this component. | CComponent |
evaluateExpression() | Evaluates a PHP expression or callback under the context of this component. | CComponent |
getCurrentPage() | Returns the zero-based index of the current page. Defaults to 0. | CPagination |
getEventHandlers() | Returns the list of attached event handlers for an event. | CComponent |
getItemCount() | Returns total number of items. Defaults to 0. | CPagination |
getLimit() | Returns the limit of the data. This may be used to set the LIMIT value for a SQL statement for fetching the current page of data. This returns the same value as pageSize. | CPagination |
getOffset() | Returns the offset of the data. This may be used to set the OFFSET value for a SQL statement for fetching the current page of data. | CPagination |
getPageCount() | Returns number of pages | CPagination |
getPageSize() | Returns number of items in each page. Defaults to 10. | CPagination |
hasEvent() | Determines whether an event is defined. | CComponent |
hasEventHandler() | Checks whether the named event has attached handlers. | CComponent |
hasProperty() | Determines whether a property is defined. | CComponent |
raiseEvent() | Raises an event. | CComponent |
setCurrentPage() | Sets the zero-based index of the current page. | CPagination |
setItemCount() | Sets total number of items. | CPagination |
setPageSize() | Sets number of items in each page | CPagination |
Property Details
currentPage property
public integer getCurrentPage(boolean $recalculate=true)
public void setCurrentPage(integer $value)
the zero-based index of the current page. Defaults to 0.
itemCount property
public integer getItemCount()
public void setItemCount(integer $value)
total number of items. Defaults to 0.
limit property read-only (available since v1.1.0)
public integer getLimit()
the limit of the data. This may be used to set the LIMIT value for a SQL statement for fetching the current page of data. This returns the same value as pageSize.
offset property read-only (available since v1.1.0)
public integer getOffset()
the offset of the data. This may be used to set the OFFSET value for a SQL statement for fetching the current page of data.
pageCount property read-only
public integer getPageCount()
number of pages
pageSize property
public integer getPageSize()
public void setPageSize(integer $value)
number of items in each page. Defaults to 10.
pageVar property
public string $pageVar;
name of the GET variable storing the current page index. Defaults to 'page'.
params property
public array $params;
of parameters (name=>value) that should be used instead of GET when generating pagination URLs. Defaults to null, meaning using the currently available GET parameters.
route property
public string $route;
the route (controller ID and action ID) for displaying the paged contents. Defaults to empty string, meaning using the current route.
validateCurrentPage property (available since v1.1.4)
public boolean $validateCurrentPage;
whether to ensure currentPage is returning a valid page number. When this property is true, the value returned by currentPage will always be between 0 and (pageCount-1). Because pageCount relies on the correct value of itemCount, it means you must have knowledge about the total number of data items when you want to access currentPage. This is fine for SQL-based queries, but may not be feasible for other kinds of queries (e.g. MongoDB). In those cases, you may set this property to be false to skip the validation (you may need to validate yourself then). Defaults to true.
Method Details
__construct() method
public void __construct(integer $itemCount=0) | ||
$itemCount | integer | total number of items. |
public function __construct($itemCount=0)
{
$this->setItemCount($itemCount);
}
Constructor.
applyLimit() method
public void applyLimit(CDbCriteria $criteria) | ||
$criteria | CDbCriteria | the query criteria that should be applied with the limit |
public function applyLimit($criteria)
{
$criteria->limit=$this->getLimit();
$criteria->offset=$this->getOffset();
}
Applies LIMIT and OFFSET to the specified query criteria.
createPageUrl() method
public string createPageUrl(CController $controller, integer $page) | ||
$controller | CController | the controller that will create the actual URL |
$page | 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->params===null ? $_GET : $this->params;
if($page>0) // page 0 is the default
$params[$this->pageVar]=$page+1;
else
unset($params[$this->pageVar]);
return $controller->createUrl($this->route,$params);
}
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.
getCurrentPage() method
public integer getCurrentPage(boolean $recalculate=true) | ||
$recalculate | 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;
if($this->validateCurrentPage)
{
$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;
}
getItemCount() method
public integer getItemCount() | ||
{return} | integer | total number of items. Defaults to 0. |
public function getItemCount()
{
return $this->_itemCount;
}
getLimit() method (available since v1.1.0)
public integer getLimit() | ||
{return} | integer | the limit of the data. This may be used to set the LIMIT value for a SQL statement for fetching the current page of data. This returns the same value as pageSize. |
public function getLimit()
{
return $this->getPageSize();
}
getOffset() method (available since v1.1.0)
public integer getOffset() | ||
{return} | integer | the offset of the data. This may be used to set the OFFSET value for a SQL statement for fetching the current page of data. |
public function getOffset()
{
return $this->getCurrentPage()*$this->getPageSize();
}
getPageCount() method
public integer getPageCount() | ||
{return} | integer | number of pages |
public function getPageCount()
{
return (int)(($this->_itemCount+$this->_pageSize-1)/$this->_pageSize);
}
getPageSize() method
public integer getPageSize() | ||
{return} | integer | number of items in each page. Defaults to 10. |
public function getPageSize()
{
return $this->_pageSize;
}
setCurrentPage() method
public void setCurrentPage(integer $value) | ||
$value | integer | the zero-based index of the current page. |
public function setCurrentPage($value)
{
$this->_currentPage=$value;
$_GET[$this->pageVar]=$value+1;
}
setItemCount() method
public void setItemCount(integer $value) | ||
$value | integer | total number of items. |
public function setItemCount($value)
{
if(($this->_itemCount=$value)<0)
$this->_itemCount=0;
}
setPageSize() method
public void setPageSize(integer $value) | ||
$value | integer | number of items in each page |
public function setPageSize($value)
{
if(($this->_pageSize=$value)<=0)
$this->_pageSize=self::DEFAULT_PAGE_SIZE;
}
© 2008–2017 by Yii Software LLC
Licensed under the three clause BSD license.
http://www.yiiframework.com/doc/api/1.1/CPagination