详解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写入数据库类代码分享
Jul 26 PHP
php实现水仙花数示例分享
Apr 03 PHP
php实现获取文章内容第一张图片的方法
Nov 04 PHP
php从数组中随机选择若干不重复元素的方法
Mar 14 PHP
PHP实现批量生成App各种尺寸Logo
Mar 19 PHP
PHP中4种常用的抓取网络数据方法
Jun 04 PHP
PHP使用curl模拟post上传及接收文件的方法
Mar 04 PHP
微信公众号判断用户是否已关注php代码解析
Jun 24 PHP
PHP+Ajax验证码验证用户登录
Jul 20 PHP
php 可变函数使用小结
Jun 12 PHP
PHP PDOStatement::nextRowset讲解
Feb 01 PHP
PHP类的自动加载与命名空间用法实例分析
Jun 05 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
Laravel框架数据库CURD操作、连贯操作总结
2014/09/03 PHP
php微信公众开发之获取周边酒店信息的方法
2014/12/22 PHP
Symfony查询方法实例小结
2017/06/28 PHP
laravel框架中间件简单使用方法示例
2020/01/25 PHP
javascript两种function的定义介绍及区别说明
2013/05/02 Javascript
处理及遍历XML文档DOM元素属性及方法整理
2013/08/23 Javascript
jquery垂直公告滚动实现代码
2013/12/08 Javascript
js操作滚动条事件实例
2015/01/29 Javascript
jQuery实现将页面上HTML标签换成另外标签的方法
2015/06/09 Javascript
Javascript刷新窗口方法小结
2015/10/21 Javascript
今天抽时间给大家整理jquery和ajax的相关知识
2015/11/17 Javascript
基于javascript实现句子翻牌网页版小游戏
2016/03/23 Javascript
总结在前端排序中遇到的问题
2016/07/19 Javascript
浅谈JavaScript中的this指针和引用知识
2016/08/05 Javascript
Js查找字符串中出现次数最多的字符及个数实例解析
2016/09/05 Javascript
js事件源window.event.srcElement兼容性写法(详解)
2016/11/25 Javascript
详解Vue中过度动画效果应用
2017/05/25 Javascript
Nodejs中的JWT和Session的使用
2018/08/21 NodeJs
Vue axios全局拦截 get请求、post请求、配置请求的实例代码
2018/11/28 Javascript
详解Vue.js自定义tipOnce指令用法实例
2018/12/19 Javascript
微信小程序日历效果
2018/12/29 Javascript
js中对象和面向对象与Json介绍
2019/01/21 Javascript
浅谈如何优雅处理JavaScript异步错误
2019/11/12 Javascript
详解微信小程序入门从这里出发(登录注册、开发工具、文件及结构介绍)
2020/07/21 Javascript
解决Ant Design Modal内嵌Form表单initialValue值不动态更新问题
2020/10/29 Javascript
[01:14:05]《加油DOTA》第四期
2014/08/25 DOTA
[00:47]DOTA2荣耀之路6:天火,天火!
2018/05/30 DOTA
Python多版本开发环境管理工具介绍
2019/07/03 Python
Python使用多进程运行含有任意个参数的函数
2020/05/02 Python
美国经典刺绣和字母儿童服装特卖:Smocked Auctions
2018/07/16 全球购物
LINUX下线程,GDI类的解释
2012/04/17 面试题
护士演讲稿范文
2014/01/05 职场文书
公司人事专员岗位职责
2014/08/11 职场文书
千手观音观后感
2015/06/03 职场文书
2019请假条的基本格式及范文!
2019/07/05 职场文书
导游词之寿县报恩寺
2020/01/19 职场文书