Welcome

首页 / 网页编程 / PHP / 详解Yii实现分页的两种方法

Yii实现分页的两种方法,一种是用DAO实现,另外一种是在widget实现.

各有优点吧,第一种效率会高一点, 第二种可以使用自带的表格,方便一些.

一. DAO实现分页.

 [Controller层]
public function actionReport(){$sql = "select remitdate, sum(rate) sumrate from td_delivery group by remitdate order by remitdate desc";$criteria=new CDbCriteria();$result = Yii::app()->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层]

 <?php foreach($posts as $row):?><?php echo CHtml::link($row["remitdate"],array("delivery/view","remitdate"=>$row["sumrate"]));?><?php echo $row["sumrate"]."<br />" ?> <?php endforeach;?> <?php//分页widget代码:$this->widget("CLinkPager",array("pages"=>$pages)); ?>
优点: DAO效率高; 缺点: view层需要自己写一些样式,稍显麻烦一点

二. widget实现分页

[model层]

/** * @var string attribute : 日运费 (统计用) * 需要对新增加的字段做个声明 */public $dayrate;/* * 统计功能: 统计每日的运费 */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",),));}
[Controller层]

/** * 运单统计功能: * 按日期统计 */public function actionReport(){$model=new Delivery("statistics");$model->unsetAttributes(); // clear any default values $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",),),)); ?>
优点: 可以使用自带的样式; 缺点: 效率略低.
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。