详解Yii实现分页的两种方法
Yii实现分页的两种方法,一种是用DAO实现,另外一种是在widget实现.
各有优点吧,第一种效率会高一点,第二种可以使用自带的表格,方便一些.
一.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',
),
));
}
[Controller层]
/**
*运单统计功能:
*按日期统计
*/
publicfunctionactionReport()
{
$model=newDelivery('statistics');
$model->unsetAttributes();//clearanydefaultvalues
$this->render('report',array(
'model'=>$model,
));
}
[View层]
<?php$this->widget('zii.widgets.grid.CGridView',array(
'id'=>'delivery-grid',
'dataProvider'=>$model->statistics(),
'filter'=>$model,
'columns'=>array(
'remitdate',
'dayrate',
array(
'class'=>'CButtonColumn',
),
),
));?>
优点:可以使用自带的样式;缺点:效率略低.
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。