详解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 相关文章推荐
web方式ftp
Oct 09 PHP
PHP获取文件后缀名的三个函数
Oct 15 PHP
PHP中HTML标签过滤技巧
Jan 07 PHP
PHP中使用FFMPEG获取视频缩略图和视频总时长实例
May 04 PHP
PHP has encountered a Stack overflow问题解决方法
Nov 03 PHP
Yii框架登录流程分析
Dec 03 PHP
如何在HTML 中嵌入 PHP 代码
May 13 PHP
PHP如何通过传引用的思想实现无限分类(代码简单)
Oct 13 PHP
PHP中类的继承和用法实例分析
May 24 PHP
支付宝支付开发――当面付条码支付和扫码支付实例
Nov 04 PHP
php实现批量上传数据到数据库(.csv格式)的案例
Jun 18 PHP
php中请求url的五种方法总结
Jul 13 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如何解决无法上传大于8M的文件问题
2014/03/10 PHP
PHP6 中可能会出现的新特性预览
2014/04/04 PHP
php字符串替换函数substr_replace()用法实例
2015/03/17 PHP
PHP实现在windows下配置sendmail并通过mail()函数发送邮件的方法
2017/06/20 PHP
jquery $(document).ready() 与window.onload的区别
2009/12/28 Javascript
javascript获取URL参数与参数值的示例代码
2013/12/20 Javascript
javascript获取函数名称、函数参数、对象属性名称的代码实例
2014/04/12 Javascript
Node.js中使用Log.io在浏览器中实时监控日志(等同tail -f命令)
2014/09/17 Javascript
JS实现字符串转日期并比较大小实例分析
2015/12/09 Javascript
浅谈jquery.form.js的ajaxSubmit和ajaxForm的使用
2016/09/09 Javascript
AngularJS $http模块POST请求实现
2017/04/08 Javascript
利用node.js写一个爬取知乎妹纸图的小爬虫
2017/05/03 Javascript
vue.js声明式渲染和条件与循环基础知识
2017/07/31 Javascript
详解webpack babel的配置
2018/01/09 Javascript
Vue中使用Sortable的示例代码
2018/04/07 Javascript
通过jquery.cookie.js实现记住用户名、密码登录功能
2018/06/20 jQuery
JS遍历JSON数组及获取JSON数组长度操作示例【测试可用】
2018/12/12 Javascript
layui 实现表单和文件上传一起传到后台的例子
2019/09/16 Javascript
Vue 3.0双向绑定原理的实现方法
2019/10/23 Javascript
[02:52]2017DOTA2国际邀请赛中国区预选赛晋级之路
2017/07/03 DOTA
windows系统中python使用rar命令压缩多个文件夹示例
2014/05/06 Python
windows下python安装paramiko模块和pycrypto模块(简单三步)
2017/07/06 Python
详谈python read readline readlines的区别
2017/09/22 Python
详解Python自建logging模块
2018/01/29 Python
python实现文件的备份流程详解
2019/06/18 Python
Python中字符串List按照长度排序
2019/07/01 Python
使用Python实现画一个中国地图
2019/11/23 Python
pycharm软件实现设置自动保存操作
2020/06/08 Python
html5调用摄像头功能的实现代码
2018/05/07 HTML / CSS
澳大利亚最早和最古老的巨型游戏专家:Yardgames
2020/02/20 全球购物
Python使用openpyxl复制整张sheet
2021/03/24 Python
管事部库房保管员岗位职责
2014/02/21 职场文书
我爱读书演讲稿
2014/05/07 职场文书
药店收银员岗位职责
2015/04/07 职场文书
《田忌赛马》教学反思
2016/02/19 职场文书
MySQL 角色(role)功能介绍
2021/04/24 MySQL