Yii: 设置数据翻页

来源:互联网 发布:php 无法设置cookie 编辑:程序博客网 时间:2024/05/01 13:13

一种方法是使用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')        )    )));?>

iefreer

原创粉丝点击