Yii分页用法实例详解
下面我总结了在Yii常用的一些yii分页方式与实例代码,这里有普通分页与ajax实现分页,希望此文章对大家会有所帮助。 第一种:CListView分页 针对对象形式的数据分页Controller: 代码如下: order = 'news_id DESC';
$criteria->condition = 'user_id = 1';
$dataProvider = new CActiveDataProvider('News',array( $this->render('view',array( View: <div class="codetitle"><a style="CURSOR: pointer" data="16927" class="copybut" id="copybut16927" onclick="doCopy('code16927')"> 代码如下:<div class="codebody" id="code16927"><?php $this->widget('zii.widgets.CListView',//数据 'itemView' => '_view',//显示的模版 'id' => Yii::app()->controller->id, 'itemsTagName' => 'ul', 'ajaxVar' => '',//默认为page或ajax 去掉后url更简洁 'htmlOptions' => array('class' => Yii::app()->controller->id), 'loadingCssClass' => 'loading',//默认为list-view-loading //'template' => '{summary}{sorter}{items}{pager}',//显示的顺序 //'ajaxUpdate' => false,//是否ajax分页 false或分页显示的容器id //'beforeAjaxUpdate' => 'before_ajax_update',//回调函数 在common.js里完成 //'afterAjaxUpdate' => 'after_ajax_update', 'emptyText' => ' <DIV class="alert alert-waning"> 暂无数据! ',//无数据时显示内容 'pagerCssClass' => 'pagination',//分页的class 'pager' => array( 'selectedPageCssClass' => 'active',//当前页的class 'hiddenPageCssClass' => 'disabled',//禁用页的class 'header' => '',//分页前显示的内容 'maxButtonCount' => 10,//显示分页数量 'htmlOptions' => array('class' => ''), 'firstPageLabel' => '首页', 'nextPageLabel' => '下一页', 'prevPageLabel' => '上一页', 'lastPageLabel' => '末页', )); ?> 第二种:CLinkPager 针对数组形式的数据分页Controller: 代码如下: $criteria = new CDbCriteria();
$criteria->order = 'news_id DESC'; $criteria->condition = 'user_id = 1'; $count = News::model()->count($criteria); $pages->pageSize = 10; $this->render('index',array('list' => $list,'pages' => $pages)); View: 代码如下:
news_title; ?>
news_intro; ?>
widget('CLinkPager',array(
'pages' => $pages,
'selectedPageCssClass' => 'active',
)
);
?>
第三种: DAO实现分页.Controller层: 代码如下: db->createCommand($sql)->query();
$pages=new CPagination($result->rowCount);
$pages->pageSize=2;
$pages->applyLimit($criteria);
$result=Yii::app()->db->createCommand($sql." LIMIT :offset,:limit");
$result->bindValue(':offset',$pages->currentPage*$pages->pageSize);
$result->bindValue(':limit',$pages->pageSize);
$posts=$result->query();
$this->render('report',array(
'posts'=>$posts,
'pages'=>$pages,
));
}
View层:
代码如下:
$row["sumrate"]));?>
" ?>
widget('CLinkPager',array('pages'=>$pages));
?>
优点: DAO效率高; 缺点: view层需要自己写一些样式,稍显麻烦一点 第四种:widget实现分页model层: 代码如下: /* * 统计功能: 统计每日的运费 */ public function statistics() { $criteria = new CDbCriteria; $criteria->select = 'remitdate,sum(rate) AS dayrate'; $criteria->group = 'remitdate'; return new CActiveDataProvider(get_class($this),array( 'criteria'=>$criteria, 'sort'=>array( // 表头设置点击排序的字段 'attributes'=>array( 'remitdate', 'dayrate'=>array( 'asc'=>'dayrate', 'desc'=>'dayrate DESC', ) ), 'defaultOrder'=>'remitdate desc', ), )); } 代码如下: unsetAttributes(); // clear any default values
$this->render('report',array( View层: <div class="codetitle"><a style="CURSOR: pointer" data="11586" class="copybut" id="copybut11586" onclick="doCopy('code11586')"> 代码如下:<div class="codebody" id="code11586"><?php $this->widget('zii.widgets.grid.CGridView',array( 'id'=>'delivery-grid', 'dataProvider'=>$model->statistics(), 'filter'=>$model, 'columns'=>array( 'remitdate', 'dayrate', array( 'class'=>'CButtonColumn', )); ?> 优点: 可以使用自带的样式; 缺点: 效率略低. 第五种:Ajax分页YII中ajax分页有多种实现方法,比较传统的就是在view中写JS来实现,大概的就是这样: 在view中js大概逻辑是这样 代码如下:
然后在controller中判断ajax请求,再使用renderPartial方法渲染局部List视图,然后局部视图会被view中的ajax方法填充到局部刷新的div中。controller的大概逻辑是:
代码如下: request->isAjaxRequest) {
$this->renderPartial('_comments',array(
'model' => $model,
'comments' => $comments,//在局部视图中foreach得到每条数据
'pages' => $pages,
));
Yii::app()->end();
}
后来发现YII中的CListview更方便,封装了分页,foreach显示list,还支持数据排序。具体的可以在YII的API手册中发掘。使用CListview是默认ajax分页的,使用方法如下:
controller中: 代码如下: order = '`create_time` DESC';
$dataProvider = new CActiveDataProvider('Comments',array(
'pagination'=>array(
'pageSize'=>Yii::app()->params['commentsPerPage'],//设置分页条数以确定取出数据的条数
),
'criteria'=>$criteria,
));
$this->render('comments',
'dataProvider' => $dataProvider,
));
然后在view中:
代码如下: widget('zii.widgets.CListView',array(
'dataProvider'=>$dataProvider,
'itemView'=>'_comments',
//'ajaxUpdate'=> false,//这样就不会AJAX翻页
'pager' => array(//pager 的配置信息。默认为
这样就实现了Ajax分页,很方便。
array('class'=>'CLinkPager') .也可以自己配置
'nextPageLabel' => '下一页 »',
'prevPageLabel' => '« 上一页'
),
//在这里还可以配置一些排序规则,具体可以查阅手册
));
?>希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |