详解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网站提速三大“软”招
Oct 09 PHP
解决phpmyadmin 乱码,支持gb2312和utf-8
Nov 20 PHP
不重新编译PHP为php增加openssl模块的方法
Jun 14 PHP
php中heredoc与nowdoc介绍
Dec 25 PHP
PHP递归遍历指定目录的文件并统计文件数量的方法
Mar 24 PHP
php正则替换处理HTML页面的方法
Jun 17 PHP
PHP实现的同步推荐操作API接口案例分析
Nov 30 PHP
ThinkPHP实现简单登陆功能
Apr 28 PHP
IOS 开发之NSDictionary转换成JSON字符串
Aug 14 PHP
php变量与JS变量实现不通过跳转直接交互的方法
Aug 25 PHP
PHP ADODB生成HTML表格函数rs2html功能【附错误处理函数用法】
May 29 PHP
php中使用array_filter()函数过滤数组实例讲解
Mar 03 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转换上传word文件为PDF的方法【基于COM组件】
2019/06/10 PHP
jQuery 开发者应该注意的9个错误
2012/05/03 Javascript
js简单实现根据身份证号码识别性别年龄生日
2013/11/29 Javascript
javaScript中的this示例学习详解及工作原理
2014/01/13 Javascript
javascript截取字符串小结
2015/04/28 Javascript
javascript获取网页各种高宽及位置的方法总结
2016/07/27 Javascript
Vue的MVVM实现方法
2017/08/16 Javascript
js+html5生成自动排列对话框实例
2017/10/09 Javascript
JQ图片文件上传之前预览功能的简单实例(分享)
2017/11/12 Javascript
基于VUE移动音乐WEBAPP跨域请求失败的解决方法
2018/01/16 Javascript
JavaScript数组,JSON对象实现动态添加、修改、删除功能示例
2018/05/26 Javascript
layui-laydate时间日历控件使用方法详解
2018/11/15 Javascript
JavaScript数据结构与算法之检索算法示例【二分查找法、计算重复次数】
2019/02/22 Javascript
详解vue移动端项目代码拆分记录
2019/03/15 Javascript
JS原型prototype和__proto__用法实例分析
2020/03/14 Javascript
JS实现公告上线滚动效果
2021/01/10 Javascript
python3使用scrapy生成csv文件代码示例
2017/12/28 Python
Django csrf 两种方法设置form的实例
2019/02/03 Python
selenium+python环境配置教程详解
2019/05/28 Python
python3读取图片并灰度化图片的四种方法(OpenCV、PIL.Image、TensorFlow方法)总结
2019/07/04 Python
python:批量统计xml中各类目标的数量案例
2020/03/10 Python
浅谈基于HTML5的在线视频播放方案
2016/02/18 HTML / CSS
澳大利亚最受欢迎的美发用品目的地:AMR
2019/08/28 全球购物
马来西亚在线药房:RoyalePharma
2019/12/01 全球购物
路由表示做什么用的?在linux环境中怎么来配置一条默认路由?
2013/06/07 面试题
初中三年毕业生的自我评价分享
2014/02/14 职场文书
产假请假条
2014/04/10 职场文书
电子专业自荐信
2014/07/01 职场文书
2015高三毕业寄语赠言
2015/02/27 职场文书
幼儿园教师个人工作总结2015
2015/05/12 职场文书
大学生活委员竞选稿
2015/11/21 职场文书
工人先锋号事迹材料(2016精选版)
2016/03/01 职场文书
初中语文教学反思范文
2016/03/03 职场文书
公司员工违法违章行为检讨书
2019/06/24 职场文书
我的收音机情缘
2022/04/05 无线电
项目中Nginx多级代理是如何获取客户端的真实IP地址
2022/05/30 Servers