详解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 相关文章推荐
phpMyAdmin 安装及问题总结
May 28 PHP
PHP数组内存耗用太多问题的解决方法
Apr 05 PHP
小文件php+SQLite存储方案
Sep 04 PHP
php数组函数序列之array_key_exists() - 查找数组键名是否存在
Oct 29 PHP
php数组函数序列之prev() - 移动数组内部指针到上一个元素的位置,并返回该元素值
Oct 31 PHP
php之Memcache学习笔记
Jun 17 PHP
PHP查询网站的PR值
Oct 30 PHP
php采用curl模仿登录人人网发布动态的方法
Nov 07 PHP
dedecms集成财付通支付接口
Dec 28 PHP
Yii2框架中日志的使用方法分析
May 22 PHP
关于ThinkPhp 框架表单验证及ajax验证问题
Jul 19 PHP
Laravel框架实现定时发布任务的方法
Aug 16 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/10/02 PHP
php计划任务之验证是否有多个进程调用同一个job的方法
2015/12/07 PHP
CI框架简单邮件发送类实例
2016/05/18 PHP
php记录搜索引擎爬行记录的实现代码
2018/03/02 PHP
PHP PDOStatement::fetchObject讲解
2019/02/01 PHP
jQuery代码优化 选择符篇
2011/11/01 Javascript
深入理解javaScript中的事件驱动
2013/05/21 Javascript
Jquery判断$(&quot;#id&quot;)获取的对象是否存在的方法
2013/09/25 Javascript
js加密解密字符串可自定义密码因子
2014/05/13 Javascript
使用 js+正则表达式为关键词添加链接
2014/11/11 Javascript
jQuery使用CSS()方法给指定元素同时设置多个样式
2015/03/26 Javascript
使用Vue完成一个简单的todolist的方法
2017/12/01 Javascript
判断jQuery是否加载完成,没完成继续判断的解决方法
2017/12/06 jQuery
微信小程序自定义组件实现tabs选项卡功能
2018/07/14 Javascript
微信小程序实现搜索历史功能
2020/03/26 Javascript
解决layer弹出层自适应页面大小的问题
2019/09/16 Javascript
JS eval代码快速解密实例解析
2020/04/23 Javascript
完美解决vue 中多个echarts图表自适应的问题
2020/07/19 Javascript
JavaScript Blob对象原理及用法详解
2020/10/14 Javascript
寻找网站后台地址的python脚本
2014/09/01 Python
Python 2.7.x 和 3.x 版本的重要区别小结
2014/11/28 Python
Python自动发邮件脚本
2017/03/31 Python
python3实现高效的端口扫描
2019/08/31 Python
Pytorch 神经网络—自定义数据集上实现教程
2020/01/07 Python
python中resample函数实现重采样和降采样代码
2020/02/25 Python
python中yield的用法详解
2021/01/13 Python
浅析border-radius如何兼容IE
2016/04/19 HTML / CSS
Vision Direct比利时:在线订购隐形眼镜
2019/08/27 全球购物
怎么写自荐书范文
2014/02/12 职场文书
《学棋》教后反思
2014/04/14 职场文书
优秀团干部个人事迹
2014/05/29 职场文书
2014年教育培训工作总结
2014/12/08 职场文书
2015年村党支部工作总结
2015/04/30 职场文书
国情备忘录观后感
2015/06/04 职场文书
倡议书怎么写?
2019/04/11 职场文书
IDEA2021.2配置docker如何将springboot项目打成镜像一键发布部署
2021/09/25 Java/Android