详解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 相关文章推荐
PHP 定界符 使用技巧
Jun 14 PHP
php 获取客户端的真实ip
Nov 30 PHP
PHP动态分页函数,PHP开发分页必备啦
Nov 07 PHP
CURL的学习和应用(附多线程实现)
Jun 03 PHP
php格式化金额函数分享
Feb 02 PHP
详解PHP中instanceof关键字及instanceof关键字有什么作用
Nov 05 PHP
php进行ip地址掩码运算处理的方法
Jul 11 PHP
PHP简单创建压缩图的方法
Aug 24 PHP
PHP使用数组实现矩阵数学运算的方法示例
May 29 PHP
详解php 使用Callable Closure强制指定回调类型
Oct 26 PHP
Laravel框架基于ajax实现二级联动功能示例
Jan 17 PHP
php实现对短信验证码发送次数的限制实例讲解
Mar 04 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
文件上传的实现
2006/10/09 PHP
编译php 5.2.14+fpm+memcached(具体操作详解)
2013/06/18 PHP
详解Laravel视图间共享数据与视图Composer
2016/08/04 PHP
ThinkPHP 5 AJAX跨域请求头设置实现过程解析
2020/10/28 PHP
PHP解决高并发的优化方案实例
2020/12/10 PHP
JQUERY 浏览器判断实现函数
2009/08/20 Javascript
javascript当onmousedown、onmouseup、onclick同时应用于同一个标签节点Element
2010/01/05 Javascript
JavaScript对象之间的转换 jQuery对象和原声DOM
2011/03/07 Javascript
让textarea自动调整大小的js代码
2011/04/12 Javascript
js 事件截取enter按键页面提交事件示例代码
2014/03/04 Javascript
Javascript遍历Html Table示例(包括内容和属性值)
2014/07/08 Javascript
微信小程序 本地存储及登录页面处理实例详解
2017/01/11 Javascript
jquery实现表单获取短信验证码代码
2017/03/13 Javascript
Angular 4中如何显示内容的CSS样式示例代码
2017/11/06 Javascript
在vue项目中使用Jquery-contextmenu插件的步骤讲解
2019/01/27 jQuery
详解vue中使用protobuf踩坑记
2019/05/07 Javascript
vue子路由跳转实现tab选项卡
2019/07/24 Javascript
js利用递归与promise 按顺序请求数据的方法
2019/08/30 Javascript
vue 自定义组件的写法与用法详解
2020/03/04 Javascript
JS数组及对象遍历方法代码汇总
2020/06/16 Javascript
[02:44]完美大师赛主赛事淘汰赛第二日观众采访
2017/11/24 DOTA
python网络编程学习笔记(一)
2014/06/09 Python
python分析网页上所有超链接的方法
2015/05/08 Python
Python利用逻辑回归模型解决MNIST手写数字识别问题详解
2020/01/14 Python
Django CSRF认证的几种解决方案
2020/03/03 Python
用CSS3和table标签实现一个圆形轨迹的动画的示例代码
2019/01/17 HTML / CSS
80年代复古T恤:TruffleShuffle
2018/07/02 全球购物
同步和异步有何异同,在什么情况下分别使用他们?
2012/12/28 面试题
Ejb技术面试题
2015/04/29 面试题
临床护士自荐信
2014/01/31 职场文书
社团文化节策划书
2014/02/01 职场文书
优秀共产党员演讲稿
2014/09/04 职场文书
自查自纠工作情况报告
2014/10/29 职场文书
工作年限证明模板
2015/06/15 职场文书
开学第一天的感想
2015/08/10 职场文书
Python pyecharts案例超市4年数据可视化分析
2022/08/14 Python