详解Yii实现分页的两种方法


Posted in PHP onJanuary 14, 2017

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',
    ),
  ),
)); ?>

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
dedecms防止FCK乱格式化你的代码的修改方法
Mar 17 PHP
php 计算两个时间戳相隔的时间的函数(小时)
Dec 18 PHP
PHP中foreach循环中使用引用要注意的地方
Jan 02 PHP
php的日期处理函数及uchome的function_coomon中日期处理函数的研究
Jan 12 PHP
php中使用cookie来保存用户登录信息的实现代码
Mar 08 PHP
CodeIgniter框架过滤HTML危险代码
Jun 12 PHP
详谈PHP面向对象中常用的关键字和魔术方法
Feb 04 PHP
php文件上传类的分享
Jul 06 PHP
laravel实现批量更新多条记录的方法示例
Oct 22 PHP
PHP常用字符串函数小结(推荐)
Aug 05 PHP
thinkPHP+mysql+ajax实现的仿百度一下即时搜索效果详解
Jul 15 PHP
在Laravel 中实现是否关注的示例
Oct 22 PHP
PHP微信分享开发详解
Jan 14 #PHP
常用PHP封装分页工具类
Jan 14 #PHP
详解php用curl调用接口方法,get和post两种方式
Jan 13 #PHP
PHP编程 SSO详细介绍及简单实例
Jan 13 #PHP
php 解决扫描二维码下载跳转问题
Jan 13 #PHP
PHP使用递归算法无限遍历数组示例
Jan 13 #PHP
PHP字符串逆序排列实现方法小结【strrev函数,二分法,循环法,递归法】
Jan 13 #PHP
You might like
PHP 组件化编程技巧
2009/06/06 PHP
基于PHP导出Excel的小经验 完美解决乱码问题
2013/06/10 PHP
PHP使用缓存即时输出内容(output buffering)的方法
2015/08/03 PHP
解决出现SoapFault (looks like we got no XML document)的问题
2017/06/24 PHP
javascript 简单高效判断数据类型 系列函数 By shawl.qiu
2007/03/06 Javascript
javascript Window及document对象详细整理
2011/01/12 Javascript
stream.js 一个很小、完全独立的Javascript类库
2011/10/28 Javascript
鼠标滑过出现预览的大图提示效果
2014/02/26 Javascript
JS实现表格数据各种搜索功能的方法
2015/03/03 Javascript
AngularJS学习笔记之基本指令(init、repeat)
2015/06/16 Javascript
java中String类型变量的赋值问题介绍
2016/03/23 Javascript
基于jQuery.validate及Bootstrap的tooltip开发气泡样式的表单校验组件思路详解
2016/07/18 Javascript
微信小程序 自己制作小组件实例详解
2016/12/22 Javascript
浅谈Emergence.js 检测元素可见性的 js 插件
2017/11/18 Javascript
解决vue中使用Axios调用接口时出现的ie数据处理问题
2018/08/13 Javascript
Node.js实现简单的爬取的示例代码
2019/06/25 Javascript
[57:47]Fnatic vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
[02:29]大剑、皮鞭、女装,这届DOTA2勇士令状里都有
2020/07/17 DOTA
[00:49]完美世界DOTA2联赛10月28日开团时刻:随便打
2020/10/29 DOTA
[47:18]完美世界DOTA2联赛循环赛 IO vs FTD BO2第一场 11.05
2020/11/06 DOTA
Python中使用partial改变方法默认参数实例
2015/04/28 Python
在Python的web框架中配置app的教程
2015/04/30 Python
python计算牛顿迭代多项式实例分析
2015/05/07 Python
Python for Informatics 第11章 正则表达式(一)
2016/04/21 Python
python+OpenCV实现车牌号码识别
2019/11/08 Python
python爬虫开发之PyQuery模块详细使用方法与实例全解
2020/03/09 Python
python matplotlib工具栏源码探析二之添加、删除内置工具项的案例
2021/02/25 Python
Ellos丹麦:时尚和服装在线
2016/09/19 全球购物
教育学专业毕业生的自我评价
2013/11/21 职场文书
大学生活动策划方案
2014/02/10 职场文书
培训主管的职业生涯规划
2014/03/06 职场文书
培训班主持词
2014/03/28 职场文书
2015年社区综治宣传月活动总结
2015/03/25 职场文书
中学总务处工作总结
2015/08/12 职场文书
2019年暑期法院实习报告
2019/12/18 职场文书
mysql字段为NULL索引是否会失效实例详解
2022/05/30 MySQL