CPagination

优质
小牛编辑
130浏览
2023-12-01
所有包 | 属性 | 方法
system.web
继承class CPagination » CComponent
源自1.0
版本$Id: CPagination.php 3515 2011-12-28 12:29:24Z mdomba $
源码framework/web/CPagination.php
CPagination呈现相关信息到页码。

当数据需要渲染到多页时,我们可能使用CPagination去呈现信息, 诸如total item count, page size,current page等。 这些信息被传递到pagers渲染 分页按钮或链接。

例如:

控制器动作:
function actionIndex(){  $criteria = new CDbCriteria();  $count=Article::model()->count($criteria);  $pages=new CPagination($count);  // 返回前一页  $pages->pageSize=10;  $pages->applyLimit($criteria);  $models = Post::model()->findAll($criteria);  $this->render('index', array(  'models' => $models,       'pages' => $pages  ));
}


视图:
<?php foreach($models as $model): ?>  // 显示一个模型
<?php endforeach; ?>
// 显示分页
<?php $this->widget('CLinkPager', array(  'pages' => $pages,
)) ?>

公共属性

隐藏继承属性

属性类型描述定义在
currentPageinteger当前页的从零开始的索引。默认是0。CPagination
itemCountinteger项目总数。默认是0。CPagination
limitinteger数据的限制。 这个可能用作设置LIMIT值为一条SQL语句去获取当前页数据。 这个返回和pageSize同样的值。CPagination
offsetinteger数据的偏移量。 这个可能用于设置OFFSET值为一个SQL语句去获取当前页数据。CPagination
pageCountinteger页的数目CPagination
pageSizeinteger每一页的项目数量。默认是10。CPagination
pageVarstring存储当前页索引的GET变量名称。默认是‘page’。CPagination
paramsarray当生成分页URL时用于替换GET的参数(name=>value)。 默认是null,意味着使用当前变量GET参数。CPagination
routestring显示页内容的路由(controller ID和action ID)。 默认为空字符串,意味着使用当前路由。CPagination
validateCurrentPageboolean是否确保currentPage返回一个有效的页码。 当这个属性为true时,值通过currentPage返回,将总是在 0和(pageCount-1)之间。因为pageCount依赖正确的itemCount值, 这意味着你必须知道数据项目总数,当你想访问currentPage时。 这个基于SQL查询是正常的,但是在其它种类的查询是不可行的(例如MongoDB)。 在那种情况下,你可以设置这个属性为false去跳过验证(然后你可能需要自己验证)。 默认为true。CPagination

公共方法

隐藏继承方法

方法描述定义在
__call()如果类中没有调的方法名,则调用这个方法。CComponent
__construct()构造方法。CPagination
__get()返回一个属性值、一个事件处理程序列表或一个行为名称。CComponent
__isset()检查一个属性是否为null。CComponent
__set()设置一个组件的属性值。CComponent
__unset()设置一个组件的属性为null。CComponent
applyLimit()为指定的查询条件应用LIMIT和OFFSET。CPagination
asa()返回这个名字的行为对象。CComponent
attachBehavior()附加一个行为到组件。CComponent
attachBehaviors()附加一个行为列表到组件。CComponent
attachEventHandler()为事件附加一个事件处理程序。CComponent
canGetProperty()确定属性是否可读。CComponent
canSetProperty()确定属性是否可写。CComponent
createPageUrl()创建适合用于分页的URL。CPagination
detachBehavior()从组件中分离一个行为。CComponent
detachBehaviors()从组件中分离所有行为。CComponent
detachEventHandler()分离一个存在的事件处理程序。CComponent
disableBehavior()禁用一个附加行为。CComponent
disableBehaviors()禁用组件附加的所有行为。CComponent
enableBehavior()启用一个附加行为。CComponent
enableBehaviors()启用组件附加的所有行为。CComponent
evaluateExpression()计算一个PHP表达式,或根据组件上下文执行回调。CComponent
getCurrentPage()返回当前页的从零开始的索引。默认是0。CPagination
getEventHandlers()返回一个事件的附加处理程序列表。CComponent
getItemCount()返回项目总数。默认是0。CPagination
getLimit()返回数据的限制。 这个可能用作设置LIMIT值为一条SQL语句去获取当前页数据。 这个返回和pageSize同样的值。CPagination
getOffset()返回数据的偏移量。 这个可能用于设置OFFSET值为一个SQL语句去获取当前页数据。CPagination
getPageCount()返回页的数目CPagination
getPageSize()返回每一页的项目数量。默认是10。CPagination
hasEvent()确定一个事件是否定义。CComponent
hasEventHandler()检查事件是否有附加的处理程序。CComponent
hasProperty()确定属性是否被定义。CComponent
raiseEvent()发起一个事件。CComponent
setCurrentPage()设置当前页的从零开始的索引。CPagination
setItemCount()设置项目总数。CPagination
setPageSize()设置每一页的项目数量CPagination

属性详细

currentPage 属性 public integer getCurrentPage(boolean $recalculate=true)
public void setCurrentPage(integer $value)

当前页的从零开始的索引。默认是0。

itemCount 属性 public integer getItemCount()
public void setItemCount(integer $value)

项目总数。默认是0。

limit 属性 只读 (可用自 v1.1.0) public integer getLimit()

数据的限制。 这个可能用作设置LIMIT值为一条SQL语句去获取当前页数据。 这个返回和pageSize同样的值。

offset 属性 只读 (可用自 v1.1.0) public integer getOffset()

数据的偏移量。 这个可能用于设置OFFSET值为一个SQL语句去获取当前页数据。

pageCount 属性 只读 public integer getPageCount()

页的数目

pageSize 属性 public integer getPageSize()
public void setPageSize(integer $value)

每一页的项目数量。默认是10。

pageVar 属性 public string $pageVar;

存储当前页索引的GET变量名称。默认是‘page’。

params 属性 public array $params;

当生成分页URL时用于替换GET的参数(name=>value)。 默认是null,意味着使用当前变量GET参数。

route 属性 public string $route;

显示页内容的路由(controller ID和action ID)。 默认为空字符串,意味着使用当前路由。

validateCurrentPage 属性 (可用自 v1.1.4) public boolean $validateCurrentPage;

是否确保currentPage返回一个有效的页码。 当这个属性为true时,值通过currentPage返回,将总是在 0和(pageCount-1)之间。因为pageCount依赖正确的itemCount值, 这意味着你必须知道数据项目总数,当你想访问currentPage时。 这个基于SQL查询是正常的,但是在其它种类的查询是不可行的(例如MongoDB)。 在那种情况下,你可以设置这个属性为false去跳过验证(然后你可能需要自己验证)。 默认为true。

方法详细

__construct() 方法
public void __construct(integer $itemCount=0)
$itemCountinteger项目总数。
源码: framework/web/CPagination.php#108 (显示) publicfunction__construct($itemCount=0)
{
$this->setItemCount($itemCount);
}

构造方法。

applyLimit() 方法
public void applyLimit(CDbCriteria $criteria)
$criteriaCDbCriteria将被和limit一起应用的查询条件
源码: framework/web/CPagination.php#215 (显示) publicfunctionapplyLimit($criteria)
{
$criteria->limit=$this->getLimit();
$criteria->offset=$this->getOffset();
}

为指定的查询条件应用LIMIT和OFFSET。

createPageUrl() 方法
public string createPageUrl(CController $controller, integer $page)
$controllerCControllerthe controller that will create the actual URL
$pageintegerthe page that the URL should point to. This is a zero-based index.
{return}stringthe created URL
源码: framework/web/CPagination.php#201 (显示) publicfunctioncreatePageUrl($controller,$page)
{
$params=$this->params===null?$_GET:$this->params;
if($page>0)//page0isthedefault
$params[$this->pageVar]=$page+1;
else
unset($params[$this->pageVar]);
return$controller->createUrl($this->route,$params);
}

创建适合用于分页的URL。 这个方法主要是当创建URL用于处理分页时被分页器调用。 默认的实现是 调用控制器的带有分页信息的createUrl方法。 你可以覆盖这个方法, 如果你的URL方案不同于控制器的createUrl所支持的方法。

getCurrentPage() 方法
public integer getCurrentPage(boolean $recalculate=true)
$recalculateboolean是否重新当前页基于页大小和项目数量。
{return}integer当前页的从零开始的索引。默认是0。
源码: framework/web/CPagination.php#159 (显示) publicfunctiongetCurrentPage($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() 方法
public integer getItemCount()
{return}integer项目总数。默认是0。
源码: framework/web/CPagination.php#133 (显示) publicfunctiongetItemCount()
{
return$this->_itemCount;
}
getLimit() 方法 (可用自 v1.1.0)
public integer getLimit()
{return}integer数据的限制。 这个可能用作设置LIMIT值为一条SQL语句去获取当前页数据。 这个返回和pageSize同样的值。
源码: framework/web/CPagination.php#237 (显示) publicfunctiongetLimit()
{
return$this->getPageSize();
}
getOffset() 方法 (可用自 v1.1.0)
public integer getOffset()
{return}integer数据的偏移量。 这个可能用于设置OFFSET值为一个SQL语句去获取当前页数据。
源码: framework/web/CPagination.php#226 (显示) publicfunctiongetOffset()
{
return$this->getCurrentPage()*$this->getPageSize();
}
getPageCount() 方法
public integer getPageCount()
{return}integer页的数目
源码: framework/web/CPagination.php#150 (显示) publicfunctiongetPageCount()
{
return(int)(($this->_itemCount+$this->_pageSize-1)/$this->_pageSize);
}
getPageSize() 方法
public integer getPageSize()
{return}integer每一页的项目数量。默认是10。
源码: framework/web/CPagination.php#116 (显示) publicfunctiongetPageSize()
{
return$this->_pageSize;
}
setCurrentPage() 方法
public void setCurrentPage(integer $value)
$valueinteger当前页的从零开始的索引。
源码: framework/web/CPagination.php#184 (显示) publicfunctionsetCurrentPage($value)
{
$this->_currentPage=$value;
$_GET[$this->pageVar]=$value+1;
}
setItemCount() 方法
public void setItemCount(integer $value)
$valueinteger项目总数。
源码: framework/web/CPagination.php#141 (显示) publicfunctionsetItemCount($value)
{
if(($this->_itemCount=$value)<0)
$this->_itemCount=0;
}
setPageSize() 方法
public void setPageSize(integer $value)
$valueinteger每一页的项目数量
源码: framework/web/CPagination.php#124 (显示) publicfunctionsetPageSize($value)
{
if(($this->_pageSize=$value)<=0)
$this->_pageSize=self::DEFAULT_PAGE_SIZE;
}