Yii中的Ajax分页和CListview(转)

YII中ajax分页有多种实现方法,比较传统的就是在view中写JS来实现,大概的就是这样:

在view中js大概逻辑是这样:

1 $('#listview .yiiPager a').live('click',function(){
2         $.ajax({
3             url:$(this).attr('href'),
4             success:function(html){
5                 $('#listview').html(html);
6             }
7         });
8         return false;//阻止a标签
9     });

然后在controller中判断ajax请求,再使用renderPartial方法渲染局部List视图,然后局部视图会被view中的ajax

方法填充到局部刷新的div中。controller的大概逻辑是:

1 if (Yii::app()->request->isAjaxRequest) {
2 $this->renderPartial('_comments',array(
3     'model' => $model,
4     'comments' => $comments,//在局部视图中foreach得到每条数据
5     'pages' => $pages,
6    ));
7     Yii::app()->end();
8

后来发现YII中的CListview更方便,封装了分页,foreach显示list,还支持数据排序。具体的可以在YII的API手册

中发掘。使用CListview是默认ajax分页的,使用方法如下:

controller中:

01 $criteria = new CDbCriteria();
02 $criteria->order = '`create_time` DESC';
03  
04 $dataProvider = new CActiveDataProvider('Comments', array(
05     'pagination'=>array(
06       'pageSize'=>Yii::app()->params['commentsPerPage'],//设置分页条数以确定取出数据的条数
07   ),
08   'criteria'=>$criteria,
09   ));
10 $this->render('comments',array(
11          'model' => $model,
12          'dataProvider' => $dataProvider,
13 ));

然后在view中:

01 <?php $this->widget('zii.widgets.CListView', array(
02   'dataProvider'=>$dataProvider,
03   'itemView'=>'_comments',
04   //'ajaxUpdate'=> false,//这样就不会AJAX翻页
05   'pager' => array(//pager 的配置信息。默认为<code>array('class'=>'CLinkPager')</code>.也可以自己配置
06    'nextPageLabel' => '下一页 »',
07    'prevPageLabel' => '« 上一页'
08   ),
09 //在这里还可以配置一些排序规则,具体可以查阅手册
10 )); ?>

这样就实现了Ajax分页,很方便。

posted @ 2013-06-15 00:32  albafica  阅读(2558)  评论(0编辑  收藏  举报