Yii实现分页的两种方法,一种是用DAO实现,另外一种是在widget实现.
一. DAO实现分页. [Controller层] 1 public function actionReport() 2 { 3 $sql = "select remitdate, sum(rate) sumrate from td_delivery 4 group by remitdate 5 order by remitdate desc"; 6 $criteria=new CDbCriteria(); 7 $result = Yii::app()->db->createCommand($sql)->query(); 8 $pages=new CPagination($result->rowCount); 9 $pages->pageSize=2; 10 $pages->applyLimit($criteria); 11 $result=Yii::app()->db->createCommand($sql." LIMIT :offset,:limit"); 12 $result->bindValue(':offset', $pages->currentPage*$pages->pageSize); 13 $result->bindValue(':limit', $pages->pageSize); 14 $posts=$result->query(); 15 $this->render('report',array( 16 'posts'=>$posts, 17 'pages'=>$pages, 18 )); 19 } [View层] 1 <?php foreach($posts as $row):?> 2 <?php echo CHtml::link($row["remitdate"],array('delivery/view','remitdate'=>$row["sumrate"]));?> 3 <?php echo $row["sumrate"]."<br />" ?> 4 <?php endforeach;?> 5 <?php 6 //分页widget代码: 7 $this->widget('CLinkPager',array('pages'=>$pages)); 8 ?> 优点: DAO效率高; 缺点: view层需要自己写一些样式,稍显麻烦一点 二. widget实现分页 [model层] 1 /** 2 * @var string attribute : 日运费 (统计用) 3 * 需要对新增加的字段做个声明 4 */ 5 public $dayrate; 6 7 8 /* 9 * 统计功能: 统计每日的运费 10 */ 11 public function statistics() 12 { 13 $criteria = new CDbCriteria; 14 $criteria->select = 'remitdate, sum(rate) AS dayrate'; 15 $criteria->group = 'remitdate'; 16 17 return new CActiveDataProvider(get_class($this), array( 18 'criteria'=>$criteria, 19 'sort'=>array( 20 // 表头设置点击排序的字段 21 'attributes'=>array( 22 'remitdate', 23 'dayrate'=>array( 24 'asc'=>'dayrate', 25 'desc'=>'dayrate DESC', 26 ) 27 ), 28 'defaultOrder'=>'remitdate desc', 29 ), 30 )); 31 } [Controller层] 1 /** 2 * 运单统计功能: 3 * 按日期统计 4 */ 5 public function actionReport() 6 { 7 $model=new Delivery('statistics'); 8 $model->unsetAttributes(); // clear any default values 9 10 $this->render('report',array( 11 'model'=>$model, 12 )); 13 } [View层] |
|