【详解】10种Yii分页功能包含自带分页和自定义分页

jerry Yii 2015年08月12日 收藏

第一种:CListView分页  针对对象形式的数据分页


Controller:
代码如下:

  1. public function actionAjax() { 
  2.         $criteria = new CDbCriteria(); 
  3.         //$criteria->order = 'news_id DESC'; 
  4.         $criteria->condition = 'user_id = 1'; 
  5.   
  6.         $dataProvider = new CActiveDataProvider('News', array( 
  7.                     'pagination' => array( 
  8.                         'pageSize' => Yii::app()->params['pagesize'], 
  9.                         'pageVar' => Yii::app()->params['pagevar'], 
  10.                     ), 
  11.                     'criteria' => $criteria, 
  12.                 )); 
  13.   
  14.   
  15.         $this->render('view', array( 
  16.             'dataProvider' => $dataProvider, 
  17.         )); 
  18. }

View:
代码如下:

  1. <?php 
  2. $this->widget('zii.widgets.CListView', array( 
  3.     'dataProvider' => $dataProvider, //数据 
  4.     'itemView' => '_view', //显示的模版 
  5.     'id' => Yii::app()->controller->id, 
  6.     'itemsTagName' => 'ul', 
  7.     'ajaxVar' => '', //默认为page或ajax 去掉后url更简洁 
  8.     'htmlOptions' => array('class' => Yii::app()->controller->id), 
  9.     'loadingCssClass' => 'loading', //默认为list-view-loading 
  10.     //'template' => '{summary}{sorter}{items}{pager}',//显示的顺序 
  11.     //'ajaxUpdate' => false, //是否ajax分页  false或分页显示的容器id 
  12.     //'beforeAjaxUpdate' => 'before_ajax_update',   //回调函数 在common.js里完成 
  13.     //'afterAjaxUpdate' => 'after_ajax_update',   
  14.     'emptyText' => 
  15. <DIV class="alert alert-waning"> 
  16.     暂无数据! 
  17. </DIV> 
  18. ', //无数据时显示内容 
  19.                     'pagerCssClass' => 'pagination', //分页的class 
  20.                     'pager' => array( 
  21.                         'selectedPageCssClass' => 'active', //当前页的class 
  22.                         'hiddenPageCssClass' => 'disabled', //禁用页的class 
  23.                         'header' => '', //分页前显示的内容 
  24.                         'maxButtonCount' => 10, //显示分页数量 
  25.                         'htmlOptions' => array('class' => ''), 
  26.                         'firstPageLabel' => '首页', 
  27.                         'nextPageLabel' => '下一页', 
  28.                         'prevPageLabel' => '上一页', 
  29.                         'lastPageLabel' => '末页', 
  30.                     ), 
  31.                 )); 
  32. ?>


第二种:CLinkPager  针对数组形式的数据分页


Controller:
代码如下:

  1. public function actionIndex() { 
  2.   
  3.         $criteria = new CDbCriteria(); 
  4.         $criteria->order = 'news_id DESC'; 
  5.         $criteria->condition = 'user_id = 1'; 
  6.   
  7.         $count = News::model()->count($criteria); 
  8.         $pages = new CPagination($count); 
  9.   
  10.         $pages->pageSize = 10; 
  11.         $pages->applyLimit($criteria); 
  12.         $list = News::model()->findAll($criteria); 
  13.   
  14.         $this->render('index', array('list' => $list, 'pages' => $pages)); 
  15. }

View:
代码如下:

  1. <UL> 
  2.     <?php foreach ($list as $item): ?> 
  3.     <LI> 
  4.           
  5.         <DIV class=page-header> 
  6.             <?php echo $item--->news_title; ?> 
  7.         </DIV> 
  8.   
  9.         <DIV class=content> 
  10.             <?php echo $item--->news_intro; ?> 
  11.         </DIV> 
  12.   
  13.     </LI> 
  14. <?php endforeach; ?> 
  15. </UL> 
  16.   
  17. <DIV class=pagination> 
  18.     <?php 
  19.     $this--->widget('CLinkPager', array( 
  20.         'pages' => $pages, 
  21.         'selectedPageCssClass' => 'active', //当前页的class 
  22.         'hiddenPageCssClass' => 'disabled', //禁用页的class 
  23.         'header' => '', //分页前显示的内容 
  24.         'maxButtonCount' => 10, //显示分页数量 
  25.         'htmlOptions' => array('class' => ''), 
  26.         'firstPageLabel' => '首页', 
  27.         'nextPageLabel' => '下一页', 
  28.         'prevPageLabel' => '上一页', 
  29.         'lastPageLabel' => '末页', 
  30.             ) 
  31.     ); 
  32.     ?> 
  33. </DIV>


第三种: 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. public function statistics()
  10. {
  11. $criteria = new CDbCriteria;
  12. $criteria->select = 'remitdate, sum(rate) AS dayrate';
  13. $criteria->group = 'remitdate';
  14. return new CActiveDataProvider(get_class($this), array(
  15. 'criteria'=>$criteria,
  16. 'sort'=>array(
  17. // 表头设置点击排序的字段
  18. 'attributes'=>array(
  19. 'remitdate',
  20. 'dayrate'=>array(
  21. 'asc'=>'dayrate',
  22. 'desc'=>'dayrate DESC',
  23. )
  24. ),
  25. 'defaultOrder'=>'remitdate desc',
  26. ),
  27. )); 
  28. }

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层:
代码如下:

  1. <?php $this->widget('zii.widgets.grid.CGridView', array(
  2. 'id'=>'delivery-grid',
  3. 'dataProvider'=>$model->statistics(),
  4. 'filter'=>$model,
  5. 'columns'=>array(
  6. 'remitdate',
  7. 'dayrate',
  8. array(
  9. 'class'=>'CButtonColumn',
  10. ),
  11. ),
  12. ));
  13. ?>

优点: 可以使用自带的样式; 缺点: 效率略低.


第五种:Ajax分页


YII中ajax分页有多种实现方法,比较传统的就是在view中写JS来实现,大概的就是这样:
在view中js大概逻辑是这样
代码如下:

  1. $('#listview .yiiPager a').live('click',function(){
  2.         $.ajax({
  3.             url:$(this).attr('href'),
  4.             success:function(html){
  5.                 $('#listview').html(html);
  6.             }
  7.         });
  8.         return false;//阻止a标签
  9. });
  10. 然后在controller中判断ajax请求,再使用renderPartial方法渲染局部List视图,然后局部视图会被view中的ajax方法填充到局部刷新的div中。controller的大概逻辑是:
  11. 代码如下:
  12. if (Yii::app()->request->isAjaxRequest) {
  13. $this->renderPartial('_comments',array(
  14.     'model' => $model,
  15.     'comments' => $comments,//在局部视图中foreach得到每条数据
  16.     'pages' => $pages,
  17.    ));
  18.     Yii::app()->end();
  19. }

后来发现YII中的CListview更方便,封装了分页,foreach显示list,还支持数据排序。具体的可以在YII的API手册中发掘。使用CListview是默认ajax分页的,使用方法如下:
controller中:
代码如下:

  1. $criteria = new CDbCriteria();
  2. $criteria->order = '`create_time` DESC';
  3. $dataProvider = new CActiveDataProvider('Comments', array(
  4.     'pagination'=>array(
  5.       'pageSize'=>Yii::app()->params['commentsPerPage'],//设置分页条数以确定取出数据的条数
  6.   ),
  7.   'criteria'=>$criteria,
  8.   ));
  9. $this->render('comments',array(
  10.          'model' => $model,
  11.          'dataProvider' => $dataProvider,
  12. ));

然后在view中:
代码如下:

  1. <?php $this->widget('zii.widgets.CListView', array(
  2.   'dataProvider'=>$dataProvider,
  3.   'itemView'=>'_comments',
  4.   //'ajaxUpdate'=> false,//这样就不会AJAX翻页
  5.   'pager' => array(//pager 的配置信息。默认为<CODE>array('class'=>'CLinkPager')</CODE>.也可以自己配置
  6.    'nextPageLabel' => '下一页 »',
  7.    'prevPageLabel' => '« 上一页'
  8.   ),
  9. //在这里还可以配置一些排序规则,具体可以查阅手册
  10. ));
  11. ?>


第六种:自定义分页实现


视图文件调用cgridview,clistview时候调用自定义的分页方法
view

  1. <?php $this->widget('zii.widgets.grid.CGridView', array(  
  2.     'id'=>'news-grid',  
  3.     'dataProvider'=>$model->search(),  
  4.     'filter'=>$model,  
  5.     'template'=>'{items}{summary}{pager}',       
  6.      'selectableRows'=>2,     
  7.      'pager'=>'ZPager',  
  8.      'summaryText'=>'页数:{pages}/{page}页',   
  9.      'columns'=>array(  
  10.         array(  
  11.             'class'=>'CCheckBoxColumn',  
  12.             'footer'=>'<button onclink="deleteAll()">button</button>  
  13.                        <button onclink="refashAll()">button</button>',  
  14.             'footerHtmlOptions'=>array('colspan'=>5),  
  15.             'selectableRows'=>2,  
  16.         ),  
  17.         'id',  
  18.         array('name'=>'title',  
  19.              'htmlOptions'=>array('width'=>'20%'),  
  20.              'value'=>'mb_substr($data->title,0,10,"utf-8")',  
  21.             ),  
  22.         array('name'=>'content',  
  23.              'htmlOptions'=>array('width'=>'20%'),  
  24.              'value'=>'mb_substr(strip_tags($data->content),0,10,"utf-8")',  
  25.             ),  
  26.         array('name'=>'type',  
  27.              'value'=>'News::model()->getNewsType($data->type)',  
  28.             ),  
  29.         'user',  
  30.         array('name'=>'status',  
  31.              'value'=>'News::model()->getNewsStatus($data->status)',  
  32.              ),  
  33.         array(  
  34.             'class'=>'CButtonColumn',  
  35.             'buttons'=>array(  
  36.                 'view'=>array('visible'=>'false'),  
  37.                 //'delete'=>array('click'=>'true'),  
  38.             ),  
  39.         ),  
  40.     ),  
  41. ));

复制基类分页类文件,做修改成为自己的分页方法

  1. framework/web/widgets/pagers/CListPager.php复制并生命名到protected/components/zpager.php修改类名称  
  2. framework/web/widgets/pagers/pager.css复制对应样式文件到protected/components/css/pager.css

修改zpager.php的css加载目录  

  1. public static function registerCssFile($url=null)  
  2. {  
  3.     if($url===null)  
  4.         $url=CHtml::asset(Yii::getPathOfAlias('application.components.css.pager').'.css');  
  5.     Yii::app()->getClientScript()->registerCssFile($url);  
  6. }

通过修改Css样式文件,也可以修改生成列表的程序,达到修改分类的目的。


第七种:Yii-列表- 定义分页,分页方法


方法一:控制器定义

  1. function actionIndex(){  
  2.     $criteria = new CDbCriteria();  
  3.     $count=Article::model()->count($criteria);  
  4.     $pages=new CPagination($count);  
  5.   
  6.     // 返回前一页  
  7.     $pages->pageSize=10;  
  8.     $pages->applyLimit($criteria);  
  9.     $models = Post::model()->findAll($criteria);  
  10.   
  11.     $this->render('index', array(  
  12.     'models' => $models,  
  13.          'pages' => $pages  
  14.     ));  
  15. }

视图定义

  1. <?php foreach($models as $model): ?>  
  2.     // 显示一个模型  
  3. <?php endforeach; ?>  
  4.   
  5. // 显示分页  
  6. <?php $this->widget('CLinkPager', array(  
  7.     'pages' => $pages,  
  8. )) ?>

方法二:控制器定义

  1. public function actionIndex()  
  2. {  
  3.     $dataProvider=new CActiveDataProvider('News',array(  
  4.             'criteria'=>array(  
  5.                 'condition'=>'status=1',  
  6.                 'order'=>'create_time DESC',  
  7.                 'with'=>array('author'),  
  8.             ),  
  9.             'pagination'=>array(  
  10.                 'pageSize'=>20,  
  11.             ),  
  12.     ));  
  13.     $this->render('index',array(  
  14.         'dataProvider'=>$dataProvider,  
  15.     ));  
  16. }

视图文件

  1. <?php $this->widget('zii.widgets.CListView', array(  
  2.     'dataProvider'=>$dataProvider,  
  3.     'itemView'=>'_view',  
  4. )); ?>

方法三:视图文件

  1. <?php $this->widget('zii.widgets.grid.CGridView', array(  
  2.     'id'=>'news-grid',  
  3.     'dataProvider'=>$model->search(),  
  4.     'filter'=>$model,  
  5.     'template'=>'{items}{summary}{pager}',    
  6.      <span style="white-space:pre"> </span> 'pager'=>array(    
  7.             'class'=>'CLinkPager',   
  8.             'header'=>'分页:',    
  9.             'prevPageLabel'=>'上一页',    
  10.             'nextPageLabel'=>'下一页',  
  11.        ),       
  12.    <span style="white-space:pre">   </span> 'summaryText'=>'页数:{pages}/{page}页',   
  13. <span style="white-space:pre">  </span>'columns'=>array(  
  14.         'id',  
  15.         array('name'=>'title',  
  16.              'htmlOptions'=>array('width'=>'20%'),  
  17.              'value'=>'mb_substr($data->title,0,10,"utf-8")',  
  18.             ),  
  19.         array('name'=>'content',  
  20.              'htmlOptions'=>array('width'=>'20%'),  
  21.              'value'=>'mb_substr(strip_tags($data->content),0,10,"utf-8")',  
  22.             ),  
  23.         array('name'=>'type',  
  24.              'value'=>'News::model()->getNewsType($data->type)',  
  25.             ),  
  26.         'user',  
  27.         array('name'=>'status',  
  28.              'value'=>'News::model()->getNewsStatus($data->status)',  
  29.              ),  
  30.         array(  
  31.             'class'=>'CButtonColumn',  
  32.         ),  
  33.     ),  
  34. ));

数据模型类

  1. public function search()  
  2. {  
  3.     $criteria=new CDbCriteria;  
  4.   
  5.     $criteria->compare('id',$this->id);  
  6.     $criteria->compare('title',$this->title,true);  
  7.     $criteria->compare('content',$this->content,true);  
  8.     $criteria->compare('type',$this->type);  
  9.     $criteria->compare('user',$this->user,true);  
  10.     $criteria->compare('status',$this->status);  
  11.     $criteria->compare('create_data',$this->create_data,true);  
  12.   
  13.     return new CActiveDataProvider($this, array(  
  14.         'criteria'=>$criteria,  
  15.         'pagination'=>array(  
  16.             'pageSize'=>50,  
  17.         ),  
  18.     ));  
  19. }


第八种:Yii 中使用分页


方法中写法:

  1. public function actionIndex(){
  2.     $categoryModel = Category::model();
  3.     $criteria = new CDbCriteria();
  4.     $criteria->order = 'id ASC';
  5.     $criteria->addCondition('status=1');      //根据条件查询
  6.     $count = Category::model()->count($criteria);
  7.     $pager = new CPagination($count);
  8.     $pager->pageSize=2;
  9.     $pager->applyLimit($criteria);
  10.     $categoryInfo = Category::model()->findAll($criteria);
  11.     $this->render('index',array('pages'=>$pager,'categoryInfo'=>$categoryInfo));
  12. }

view视图中的调用:

  1. <?php $this->widget('CLinkPager',array(
  2.     'header' => '',
  3.     'firstPageLabel' => '首页',
  4.     'lastPageLabel' => '最后一页',
  5.     'prevPageLabel' => '上一页',
  6.     'nextPageLabel' => '下一页',
  7.     'pages' => $pages,
  8.     'maxButtonCount'=>3,
  9. ));?>


第八种:Yii 中分页设置


yii自己是带有自动分页功能的。只要在对应的controller里面,类似下面这样鞋代码,就会实现的

  1. $dataProvider=new CActiveDataProvider(
  2.     'Blog',
  3.     array(
  4.             'pagination'=>array('pageSize'=>10),
  5.             'criteria'=>array('order'=>'create_date DESC')
  6.         )
  7. );

但是样式还是yii中已经写好的,那么对于我,我要改掉这个样式,使用我提供的样式,可以像我下面这样写

  1. <?php
  2. $this->widget('zii.widgets.CListView', array(
  3.     'dataProvider'=>$dataProvider,
  4.     'itemView'=>'_view',
  5.         'summaryCssClass'=>'hide',
  6.         'pagerCssClass'=>'pagination',
  7.         'pager'=>array(
  8.             'class'=>'CLinkPager',
  9.             'nextPageLabel'=>'&raquo;',
  10.             'prevPageLabel'=>'&laquo;',
  11.             'firstPageLabel'=>'最前',
  12.             'lastPageLabel'=>'最后',
  13.             'htmlOptions'=>array('class'=>''),
  14.             'header'=>'',
  15.             'hiddenPageCssClass'=>'disabled',
  16.             'selectedPageCssClass'=>'active',
  17.             'previousPageCssClass'=>'',
  18.             'nextPageCssClass'=>'',
  19.     )
  20. ));
  21. ?>


第九种:yii的CListView和CGridView之分页


1,提供的dataProvider里面配置pagenation属性,例如

  1. return new CActiveDataProvider($this, array(
  2. 'criteria'=>$criteria,
  3. 'pagination'=>array('pageSize'=>3,),
  4. ));

或者在自己定义的CArrayDataProvider里面加上这些参数
2,在CListView的属性里面配置pager(不配置的话,是默认的分页,也可以自己配置)

  1. $this->widget('zii.widgets.CListView', array(
  2. 'dataProvider'=>$dataProvider,
  3. 'itemView'=>'_view',
  4. 'pager'=>array(
  5. 'class'=>'CLinkPager',//定义要调用的分页器类,默认是CLinkPager,需要完全自定义,还可以重写一个,参考我的另一篇博文:http://blog.sina.com.cn/s/blog_71d4414d0100yu6k.html
  6. // 'cssFile'=>false,//定义分页器的要调用的css文件,false为不调用,不调用则需要亲自己css文件里写这些样式
  7. 'header'=>'转往分页:',//定义的文字将显示在pager的最前面
  8. // 'footer'=>'',//定义的文字将显示在pager的最后面
  9. 'firstPageLabel'=>'首页',//定义首页按钮的显示文字
  10. 'lastPageLabel'=>'尾页',//定义末页按钮的显示文字
  11. 'nextPageLabel'=>'下一页',//定义下一页按钮的显示文字
  12. 'prevPageLabel'=>'前一页',//定义上一页按钮的显示文字
  13. //关于分页器这个array,具体还有很多属性,可参考CLinkPager的API
  14. ),
  15. ));

CGridView也是一模一样

  1. $this->widget('zii.widgets.grid.CGridView', array(
  2. 'id'=>'yii-test-user-info-grid',
  3. 'dataProvider'=>$model->search(),
  4. 'filter'=>$model,
  5. 'pager'=>array(
  6. 'class'=>'CLinkPager',//定义要调用的分页器类,默认是CLinkPager,需要完全自定义,还可以重写一个,参考我的另一篇博文:http://blog.sina.com.cn/s/blog_71d4414d0100yu6k.html
  7. // 'cssFile'=>false,//定义分页器的要调用的css文件,false为不调用,不调用则需要亲自己css文件里写这些样式
  8. 'header'=>'转往分页:',//定义的文字将显示在pager的最前面
  9. // 'footer'=>'',//定义的文字将显示在pager的最后面
  10. 'firstPageLabel'=>'首页',//定义首页按钮的显示文字
  11. 'lastPageLabel'=>'尾页',//定义末页按钮的显示文字
  12. 'nextPageLabel'=>'下一页',//定义下一页按钮的显示文字
  13. 'prevPageLabel'=>'前一页',//定义上一页按钮的显示文字
  14. //关于分页器这个array,具体还有很多属性,可参考CLinkPager的API
  15. ),
  16. 'columns'=>array(
  17. 'id',
  18. //     'sex',
  19. array(
  20. 'name'=>'sex',
  21. 'filter'=> YiiTestUserInfo::model()->getUserSex(),
  22. ),
  23. 'name',
  24. 'passwd',
  25. 'typeinfo',
  26. 'tel',
  27. 'xxxx',
  28. array(
  29. 'class'=>'CButtonColumn',
  30. ),
  31. ),
  32. ));


第十种:Yii实现分页的两种方法


一. 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.    ?>

二. 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层]

  1. <?php $this->widget('zii.widgets.grid.CGridView', array(
  2. 'id'=>'delivery-grid',
  3. 'dataProvider'=>$model->statistics(),
  4. 'filter'=>$model,
  5. 'columns'=>array(
  6. 'remitdate',
  7. 'dayrate',
  8. array(
  9. 'class'=>'CButtonColumn',
  10.  ),
  11.  ),
  12.  )); ?>