CPagination
优质
小牛编辑
130浏览
2023-12-01
所有包 | 属性 | 方法
CPagination呈现相关信息到页码。
当数据需要渲染到多页时,我们可能使用CPagination去呈现信息, 诸如total item count, page size,current page等。 这些信息被传递到pagers渲染 分页按钮或链接。
例如:
控制器动作:
视图:
public void setCurrentPage(integer $value)
public void setItemCount(integer $value)
public void setPageSize(integer $value)
源码: framework/web/CPagination.php#108 (显示)
源码: framework/web/CPagination.php#215 (显示)
源码: framework/web/CPagination.php#201 (显示)
源码: framework/web/CPagination.php#159 (显示)
源码: framework/web/CPagination.php#133 (显示)
源码: framework/web/CPagination.php#237 (显示)
源码: framework/web/CPagination.php#226 (显示)
源码: framework/web/CPagination.php#150 (显示)
源码: framework/web/CPagination.php#116 (显示)
源码: framework/web/CPagination.php#184 (显示)
源码: framework/web/CPagination.php#141 (显示)
源码: framework/web/CPagination.php#124 (显示)
包 | system.web |
---|---|
继承 | class CPagination » CComponent |
源自 | 1.0 |
版本 | $Id: CPagination.php 3515 2011-12-28 12:29:24Z mdomba $ |
源码 | framework/web/CPagination.php |
当数据需要渲染到多页时,我们可能使用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, )) ?>
公共属性
隐藏继承属性
属性 | 类型 | 描述 | 定义在 |
---|---|---|---|
currentPage | integer | 当前页的从零开始的索引。默认是0。 | CPagination |
itemCount | integer | 项目总数。默认是0。 | CPagination |
limit | integer | 数据的限制。 这个可能用作设置LIMIT值为一条SQL语句去获取当前页数据。 这个返回和pageSize同样的值。 | CPagination |
offset | integer | 数据的偏移量。 这个可能用于设置OFFSET值为一个SQL语句去获取当前页数据。 | CPagination |
pageCount | integer | 页的数目 | CPagination |
pageSize | integer | 每一页的项目数量。默认是10。 | CPagination |
pageVar | string | 存储当前页索引的GET变量名称。默认是‘page’。 | CPagination |
params | array | 当生成分页URL时用于替换GET的参数(name=>value)。 默认是null,意味着使用当前变量GET参数。 | CPagination |
route | string | 显示页内容的路由(controller ID和action ID)。 默认为空字符串,意味着使用当前路由。 | CPagination |
validateCurrentPage | boolean | 是否确保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) | ||
$itemCount | integer | 项目总数。 |
publicfunction__construct($itemCount=0)
{
$this->setItemCount($itemCount);
}
构造方法。
applyLimit() 方法public void applyLimit(CDbCriteria $criteria) | ||
$criteria | CDbCriteria | 将被和limit一起应用的查询条件 |
publicfunctionapplyLimit($criteria)
{
$criteria->limit=$this->getLimit();
$criteria->offset=$this->getOffset();
}
为指定的查询条件应用LIMIT和OFFSET。
createPageUrl() 方法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 |
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) | ||
$recalculate | boolean | 是否重新当前页基于页大小和项目数量。 |
{return} | integer | 当前页的从零开始的索引。默认是0。 |
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。 |
publicfunctiongetItemCount()
{
return$this->_itemCount;
}
getLimit() 方法 (可用自 v1.1.0)public integer getLimit() | ||
{return} | integer | 数据的限制。 这个可能用作设置LIMIT值为一条SQL语句去获取当前页数据。 这个返回和pageSize同样的值。 |
publicfunctiongetLimit()
{
return$this->getPageSize();
}
getOffset() 方法 (可用自 v1.1.0)public integer getOffset() | ||
{return} | integer | 数据的偏移量。 这个可能用于设置OFFSET值为一个SQL语句去获取当前页数据。 |
publicfunctiongetOffset()
{
return$this->getCurrentPage()*$this->getPageSize();
}
getPageCount() 方法public integer getPageCount() | ||
{return} | integer | 页的数目 |
publicfunctiongetPageCount()
{
return(int)(($this->_itemCount+$this->_pageSize-1)/$this->_pageSize);
}
getPageSize() 方法public integer getPageSize() | ||
{return} | integer | 每一页的项目数量。默认是10。 |
publicfunctiongetPageSize()
{
return$this->_pageSize;
}
setCurrentPage() 方法public void setCurrentPage(integer $value) | ||
$value | integer | 当前页的从零开始的索引。 |
publicfunctionsetCurrentPage($value)
{
$this->_currentPage=$value;
$_GET[$this->pageVar]=$value+1;
}
setItemCount() 方法public void setItemCount(integer $value) | ||
$value | integer | 项目总数。 |
publicfunctionsetItemCount($value)
{
if(($this->_itemCount=$value)<0)
$this->_itemCount=0;
}
setPageSize() 方法public void setPageSize(integer $value) | ||
$value | integer | 每一页的项目数量 |
publicfunctionsetPageSize($value)
{
if(($this->_pageSize=$value)<=0)
$this->_pageSize=self::DEFAULT_PAGE_SIZE;
}