详解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 visitFile()遍历指定文件夹函数
Aug 21 PHP
PHP Directory 函数的详解
Mar 07 PHP
php防止sql注入之过滤分页参数实例
Nov 03 PHP
PHP的拦截器实例分析
Nov 03 PHP
crontab无法执行php的解决方法
Jan 25 PHP
php 解决substr()截取中文字符乱码问题
Jul 18 PHP
PHP实现验证码校验功能
Nov 16 PHP
Ajax+Jpgraph实现的动态折线图功能示例
Feb 11 PHP
TP5.0框架实现无限极回复功能的方法分析
May 04 PHP
PHP面向对象程序设计重载(overloading)操作详解
Jun 13 PHP
Laravel timestamps 设置为unix时间戳的方法
Oct 11 PHP
Laravel框架实现定时Task Scheduling例子
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 Socket 编程
2010/04/09 PHP
PHP include任意文件或URL介绍
2014/04/29 PHP
jquery实现页面常用的返回顶部效果
2016/03/04 Javascript
[js高手之路]图解javascript的原型(prototype)对象,原型链实例
2017/08/28 Javascript
JS库之Particles.js中文开发手册及参数详解
2017/09/13 Javascript
nodejs中密码加密处理操作详解
2018/03/20 NodeJs
详解VUE中常用的几种import(模块、文件)引入方式
2018/07/03 Javascript
Three.js实现简单3D房间布局
2018/12/30 Javascript
使用 vue 实例更好的监听事件及vue实例的方法
2019/04/22 Javascript
layui的面包屑或者表单不显示的解决方法
2019/09/05 Javascript
vue props对象validator自定义函数实例
2019/11/13 Javascript
解决Vue 刷新页面导航显示高亮位置不对问题
2019/12/25 Javascript
javascript利用键盘控制小方块的移动
2020/04/20 Javascript
Python中模块与包有相同名字的处理方法
2017/05/05 Python
Python学习思维导图(必看篇)
2017/06/26 Python
Python文件的读写和异常代码示例
2017/10/31 Python
Python使用Selenium模块模拟浏览器抓取斗鱼直播间信息示例
2018/07/18 Python
Django中使用Celery的教程详解
2018/08/24 Python
值得收藏,Python 开发中的高级技巧
2018/11/23 Python
在Python中通过threshold创建mask方式
2020/02/19 Python
解决Django Haystack全文检索为空的问题
2020/05/19 Python
世界第一曲奇连锁店:Mrs. Fields Cookies
2017/02/04 全球购物
客服服务心得体会
2013/12/30 职场文书
物业工作计划书
2014/01/10 职场文书
《神奇的克隆》教学反思
2014/04/10 职场文书
文明村镇申报材料
2014/05/06 职场文书
大学教师师德师风演讲稿
2014/08/22 职场文书
2014年政风行风评议工作总结
2014/10/21 职场文书
群众路线党员个人整改措施
2014/10/27 职场文书
Pytorch 实现变量类型转换
2021/05/17 Python
SpringAop日志找不到方法的处理
2021/06/21 Java/Android
分析JVM源码之Thread.interrupt系统级别线程打断
2021/06/29 Java/Android
Java使用JMeter进行高并发测试
2021/11/23 Java/Android
mysql insert 存在即不插入语法说明
2022/03/25 MySQL
OpenStack虚拟机快照和增量备份实现方法
2022/04/04 Servers
html中两种获取标签内的值的方法
2022/06/16 jQuery