> YII 类库手册 > CPagination
system.web
继承 class CPagination » CComponent
源自 1.0
版本 $Id: CPagination.php 3515 2011-12-28 12:29:24Z mDOMba $
源码
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,
)) ?>

公共属性

属性 类型 描述 定义在
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 项目总数。
public function __construct($itemCount=0)
{
    
$this->setItemCount($itemCount);
}

构造方法。

applyLimit() 方法
public void applyLimit(CDbCriteria $criteria)
$criteria CDbCriteria 将被和limit一起应用的查询条件
public function applyLimit($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
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);
}

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

getCurrentPage() 方法
public integer getCurrentPage(boolean $recalculate=true)
$recalculate boolean 是否重新当前页基于页大小和项目数量。
{return} integer 当前页的从零开始的索引。默认是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() 方法
public integer getItemCount()
{return} integer 项目总数。默认是0。
public function getItemCount()
{
    return 
$this->_itemCount;
}

getLimit() 方法 (可用自 v1.1.0)
public integer getLimit()
{return} integer 数据的限制。 这个可能用作设置LIMIT值为一条SQL语句去获取当前页数据。 这个返回和pageSize同样的值。
public function getLimit()
{
    return 
$this->getPageSize();
}

getOffset() 方法 (可用自 v1.1.0)
public integer getOffset()
{return} integer 数据的偏移量。 这个可能用于设置OFFSET值为一个SQL语句去获取当前页数据。
public function getOffset()
{
    return 
$this->getCurrentPage()*$this->getPageSize();
}

getPageCount() 方法
public integer getPageCount()
{return} integer 页的数目
public function getPageCount()
{
    return (int)((
$this->_itemCount+$this->_pageSize-1)/$this->_pageSize);
}

getPageSize() 方法
public integer getPageSize()
{return} integer 每一页的项目数量。默认是10。
public function getPageSize()
{
    return 
$this->_pageSize;
}

setCurrentPage() 方法
public void setCurrentPage(integer $value)
$value integer 当前页的从零开始的索引。
public function setCurrentPage($value)
{
    
$this->_currentPage=$value;
    
$_GET[$this->pageVar]=$value+1;
}

setItemCount() 方法
public void setItemCount(integer $value)
$value integer 项目总数。
public function setItemCount($value)
{
    if((
$this->_itemCount=$value)<0)
        
$this->_itemCount=0;
}

setPageSize() 方法
public void setPageSize(integer $value)
$value integer 每一页的项目数量
public function setPageSize($value)
{
    if((
$this->_pageSize=$value)<=0)
        
$this->_pageSize=self::DEFAULT_PAGE_SIZE;
}

上一篇:
下一篇: