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", ), ),)); ?>
优点: 可以使用自带的样式; 缺点: 效率略低.
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持网页设计。