详解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 相关文章推荐
dedecms采集中可以过滤多行代码的正则表达式
Mar 17 PHP
FirePHP 推荐一款PHP调试工具
Apr 23 PHP
php实现12306火车票余票查询和价格查询(12306火车票查询)
Jan 14 PHP
PHP循环结构实例讲解
Feb 10 PHP
隐性调用php程序的方法
Jun 13 PHP
Zend Framework实现留言本分页功能(附demo源码下载)
Mar 22 PHP
PHP错误处理函数
Apr 03 PHP
PHP+Ajax+JS实现多图上传
May 07 PHP
php微信开发之百度天气预报
Nov 18 PHP
CentOS系统中PHP安装扩展的方式汇总
Apr 09 PHP
PHP 实现浏览记录并按日期分组
May 11 PHP
yii框架redis结合php实现秒杀效果(实例代码)
Oct 26 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学习 运算符与运算符优先级
2008/06/15 PHP
PHP面向对象学习笔记之一 基础概念
2012/10/06 PHP
谈谈关于php的优点与缺点
2013/04/11 PHP
php删除指定目录的方法
2015/04/03 PHP
PHP设置进度条的方法
2015/07/08 PHP
php使用event扩展的io复用测试的示例
2020/10/20 PHP
jQuery 1.5 源码解读 面向中高阶JSER
2011/04/05 Javascript
jquery 插件学习(二)
2012/08/06 Javascript
javascript中日期转换成时间戳的小例子
2013/03/21 Javascript
原生js实现半透明遮罩层效果具体代码
2013/06/06 Javascript
node.js中的fs.fsync方法使用说明
2014/12/15 Javascript
js完美解决IE6不支持position:fixed的bug
2015/04/24 Javascript
JQuery导航菜单选择特效
2016/04/11 Javascript
Javascript中indexOf()和lastIndexOf应用方法实例
2016/08/24 Javascript
JS日期对象简单操作(获取当前年份、星期、时间)
2016/10/26 Javascript
谈谈JavaScript数组常用方法总结
2017/01/24 Javascript
有关JS中的0,null,undefined,[],{},'''''''',false之间的关系
2017/02/14 Javascript
3种vue路由传参的基本模式
2018/02/22 Javascript
基于vue中keep-alive缓存问题的解决方法
2018/09/21 Javascript
初探Vue3.0 中的一大亮点Proxy的使用
2018/12/06 Javascript
详解Nodejs get获取远程服务器接口数据
2019/03/26 NodeJs
简单了解JS打开url的方法
2020/02/21 Javascript
[00:33]2018DOTA2亚洲邀请赛TNC出场
2018/04/04 DOTA
[01:27:44]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Aster BO3 第一场 1月24日
2021/03/11 DOTA
Python使用PyGreSQL操作PostgreSQL数据库教程
2014/07/30 Python
Python 正则表达式入门(初级篇)
2016/12/07 Python
http请求 request失败自动重新尝试代码示例
2018/01/25 Python
django中ORM模型常用的字段的使用方法
2019/03/05 Python
python实现在函数图像上添加文字和标注的方法
2019/07/08 Python
python 表格打印代码实例解析
2019/10/12 Python
Footshop法国:购买运动鞋
2020/01/19 全球购物
如何利用XMLHTTP检测URL及探测服务器信息
2013/11/10 面试题
1亿有多大教学反思
2014/05/01 职场文书
施工安全汇报材料
2014/08/17 职场文书
2015年司法局工作总结
2015/05/22 职场文书
贷款工作证明模板
2015/06/12 职场文书