Yii分页用法实例详解
下面我总结了在Yii常用的一些yii分页方式与实例代码,这里有普通分页与ajax实现分页,希望此文章对大家会有所帮助。
第一种:CListView分页 针对对象形式的数据分页
Controller:
publicfunctionactionAjax(){
$criteria=newCDbCriteria();
//$criteria->order='news_idDESC';
$criteria->condition='user_id=1';
$dataProvider=newCActiveDataProvider('News',array(
'pagination'=>array(
'pageSize'=>Yii::app()->params['pagesize'],
'pageVar'=>Yii::app()->params['pagevar'],
),
'criteria'=>$criteria,
));
$this->render('view',array(
'dataProvider'=>$dataProvider,
));
}View:
<?php
$this->widget('zii.widgets.CListView',array(
'dataProvider'=>$dataProvider,//数据
'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'=>'
<DIVclass="alertalert-waning">
暂无数据!
</DIV>
',//无数据时显示内容
'pagerCssClass'=>'pagination',//分页的class
'pager'=>array(
'selectedPageCssClass'=>'active',//当前页的class
'hiddenPageCssClass'=>'disabled',//禁用页的class
'header'=>'',//分页前显示的内容
'maxButtonCount'=>10,//显示分页数量
'htmlOptions'=>array('class'=>''),
'firstPageLabel'=>'首页',
'nextPageLabel'=>'下一页',
'prevPageLabel'=>'上一页',
'lastPageLabel'=>'末页',
),
));
?>
第二种:CLinkPager 针对数组形式的数据分页
Controller:
publicfunctionactionIndex(){
$criteria=newCDbCriteria();
$criteria->order='news_idDESC';
$criteria->condition='user_id=1';
$count=News::model()->count($criteria);
$pages=newCPagination($count);
$pages->pageSize=10;
$pages->applyLimit($criteria);
$list=News::model()->findAll($criteria);
$this->render('index',array('list'=>$list,'pages'=>$pages));
}
View:
<UL>
<?phpforeach($listas$item):?>
<LI>
<DIVclass=page-header>
<?phpecho$item--->news_title;?>
</DIV>
<DIVclass=content>
<?phpecho$item--->news_intro;?>
</DIV>
</LI>
<?phpendforeach;?>
</UL>
<DIVclass=pagination>
<?php
$this--->widget('CLinkPager',array(
'pages'=>$pages,
'selectedPageCssClass'=>'active',//当前页的class
'hiddenPageCssClass'=>'disabled',//禁用页的class
'header'=>'',//分页前显示的内容
'maxButtonCount'=>10,//显示分页数量
'htmlOptions'=>array('class'=>''),
'firstPageLabel'=>'首页',
'nextPageLabel'=>'下一页',
'prevPageLabel'=>'上一页',
'lastPageLabel'=>'末页',
)
);
?>
</DIV>
第三种:DAO实现分页.
Controller层:
publicfunctionactionReport()
{
$sql="selectremitdate,sum(rate)sumratefromtd_delivery
groupbyremitdate
orderbyremitdatedesc";
$criteria=newCDbCriteria();
$result=Yii::app()->db->createCommand($sql)->query();
$pages=newCPagination($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层:
<?phpforeach($postsas$row):?>
<?phpechoCHtml::link($row["remitdate"],array('delivery/view','remitdate'=>$row["sumrate"]));?>
<?phpecho$row["sumrate"]."<br/>"?>
<?phpendforeach;?>
<?php
//分页widget代码:
$this->widget('CLinkPager',array('pages'=>$pages));
?>
优点:DAO效率高;缺点:view层需要自己写一些样式,稍显麻烦一点
第四种:widget实现分页
model层:
/** *@varstringattribute:日运费(统计用) *需要对新增加的字段做个声明 */ public$dayrate;
/* *统计功能:统计每日的运费 */ publicfunctionstatistics() { $criteria=newCDbCriteria; $criteria->select='remitdate,sum(rate)ASdayrate'; $criteria->group='remitdate'; returnnewCActiveDataProvider(get_class($this),array( 'criteria'=>$criteria, 'sort'=>array( //表头设置点击排序的字段 'attributes'=>array( 'remitdate', 'dayrate'=>array( 'asc'=>'dayrate', 'desc'=>'dayrateDESC', ) ), 'defaultOrder'=>'remitdatedesc', ), )); }