详解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 相关文章推荐
Can't create/write to file 'C:\WINDOWS\TEMP\...MYSQL报错解决方法
Jun 30 PHP
php文件怎么打开 如何执行php文件
Dec 21 PHP
PHP分页效率终结版(推荐)
Jul 01 PHP
ThinkPHP3.1新特性之动态设置自动完成和自动验证示例
Jun 19 PHP
一个php生成16位随机数的代码(两种方法)
Sep 16 PHP
php下Memcached入门实例解析
Jan 05 PHP
PHP获取数组长度或某个值出现次数的方法
Feb 11 PHP
ecshop 2.72如何修改后台访问地址
Mar 03 PHP
php in_array() 检查数组中是否存在某个值详解
Nov 23 PHP
PHP7新特性之抽象语法树(AST)带来的变化详解
Jul 17 PHP
阿里对象存储OSS在laravel框架中的使用方法
Oct 13 PHP
php7 新增功能实例总结
May 25 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
给多个地址发邮件的类
2006/10/09 PHP
php实现图形显示Ip地址的代码及注释
2014/01/20 PHP
jquery+php+ajax显示上传进度的多图片上传并生成缩略图代码
2014/10/15 PHP
PHP中使用Imagick实现各种图片效果实例
2015/01/21 PHP
PHP+ajax分页实例简析
2015/12/07 PHP
PHP针对redis常用操作实例详解
2019/08/17 PHP
ThinkPHP5.1验证码功能实现的示例代码
2020/06/08 PHP
使用jQuery内容过滤选择器选择元素实例讲解
2013/04/18 Javascript
javascript自启动函数的问题探讨
2013/10/05 Javascript
javascript实现详细时间提醒信息效果的方法
2015/03/11 Javascript
jQuery仿淘宝网产品品牌隐藏与显示效果
2015/09/01 Javascript
JavaScript与jQuery实现的闪烁输入效果
2016/02/18 Javascript
js获取页面引用的css样式表中的属性值方法(推荐)
2016/08/19 Javascript
bootstrap Validator 模态框、jsp、表单验证 Ajax提交功能
2017/02/17 Javascript
JavaScript实现256色转灰度图
2017/02/22 Javascript
axios使用拦截器统一处理所有的http请求的方法
2018/11/02 Javascript
keep-alive不能缓存多层级路由菜单问题解决
2020/03/10 Javascript
python实现mysql的读写分离及负载均衡
2018/02/04 Python
运用Python的webbrowser实现定时打开特定网页
2019/02/21 Python
Python模块、包(Package)概念与用法分析
2019/05/31 Python
python将unicode和str互相转化的实现
2020/05/11 Python
Python ellipsis 的用法详解
2020/11/20 Python
python 装饰器的基本使用
2021/01/13 Python
Html5移动端获奖无缝滚动动画实现示例
2018/06/25 HTML / CSS
用html5的canvas和JavaScript创建一个绘图程序的简单实例
2016/07/06 HTML / CSS
微信小程序“圣诞帽”的实现思路详解
2017/12/28 HTML / CSS
中国海淘族值得信赖的海淘返利网站:55海淘
2017/01/16 全球购物
英国标志性生活方式品牌:Skinnydip London
2019/12/15 全球购物
阿玛尼美妆俄罗斯官网:Giorgio Armani Beauty RU
2020/07/19 全球购物
《骆驼和羊》教学反思
2014/02/27 职场文书
2014年党员个人剖析材料
2014/10/08 职场文书
基层党支部整改方案
2014/10/25 职场文书
教师党员学习群众路线心得体会
2014/11/04 职场文书
小学生纪律委员竞选稿
2015/11/19 职场文书
Win11如何设置右键单击显示所有选项?Win11右键单击显示所有选项设置教程
2022/04/08 数码科技
nginx 配置缓存
2022/05/11 Servers