Yii: 设置数据翻页

本文介绍了在Yii框架中实现数据分页的两种方法:一是利用CPagination和CBasePager进行自定义分页处理;二是通过扩展CGridView并结合数据搜索函数实现更复杂的数据展示需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一种方法是使用CPagination处理翻页需要的数据如:总数据项数,每页数据项数,当前页,然后在视图中使用CBasePager来绘制。

控制器动作的代码示范:

function actionIndex(){  
    $criteria = new CDbCriteria();  
    $count=Article::model()->count($criteria);  
    $pages=new CPagination($count);  
  
    // results per page  
    $pages->pageSize=10;  
    $pages->applyLimit($criteria);  
    $models = Post::model()->findAll($criteria);  
  
    $this->render('index', array(  
    'models' => $models,  
         'pages' => $pages  
    ));  
}

视图代码:

<?php foreach($models as $model): ?>  
    // display a model  
<?php endforeach; ?>  
  
// display pagination  
<?php $this->widget('CLinkPager', array(  
    'pages' => $pages,  
)) ?>   

上面的方法很灵活,可以绘制任何的数据翻页界面。

 

 

如果你希望数据以表格的形式组织和展现,那么可以直接使用另外一个解决方案:派生Yii提供的CGridView类。

这里有一个广泛使用的模式,即通过在模型中实现数据搜索的函数,然后在视图中调用。

在数据搜索函数中定义数据过滤条件,翻页条件,并最终返回数据提供容器对象CActiveDataProvider。

控制器示范代码如下:

public function search($pagesize)  
  {  
      $criteria=new CDbCriteria;  
      $criteria->compare('Id',$this->Id);  
      $criteria->compare('Title',$this->Title,true);  
      $criteria->compare('Views',$this->Views,true);  
      $criteria->compare('Description',$this->Description,true);  
  
      return new CActiveDataProvider(get_class($this), array(  
          'criteria'=>$criteria,  
          'pagination'=>array('pageSize'=>$pagesize?$pagesize:10),  
          ));  
  }  

其中pagesize参数用来控制数据表每页显示最大数据数目。

视图代码:

<?php $this->widget('application.extensions.YourGridView', array(  
    'id'=>'article-grid',  
    'dataProvider'=>$model->search(6),  
    'filter'=>$model,  
    'columns'=>array(  
        array(  
            'name'=>'Title',  
            'type'=>'raw',  
            'value'=>'$data->Title',  
            'htmlOptions'=>array('class'=>'alignLeft'),  
        ),  
        array(  
            'name'=>'Views',  
            'value'=>'$data->Views',  
            'htmlOptions'=>array('width'=>'40px')  
        )  
    )  
));  
?> 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值