详解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 相关文章推荐
计数器详细设计
Oct 09 PHP
计算2000年01月01日起到指定日的天数
Oct 09 PHP
PHP学习 运算符与运算符优先级
Jun 15 PHP
PHP在字符断点处截断文字的实现代码
Apr 21 PHP
php入门学习知识点四 PHP正则表达式基本应用
Jul 14 PHP
ThinkPHP中自定义目录结构的设置方法
Aug 15 PHP
php使用socket post数据到其它web服务器的方法
Jun 02 PHP
PHP自定义函数获取汉字首字母的方法
Dec 01 PHP
PHP简单实现合并2个数字键数组值的方法
May 30 PHP
Swoole实现异步投递task任务案例详解
Apr 02 PHP
Laravel find in set排序实例
Oct 09 PHP
PHP获取类私有属性的3种方法
Sep 10 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
在PWS上安装PHP4.0正式版
2006/10/09 PHP
Discuz!5的PHP代码高亮显示插件(黑暗中的舞者更新)
2007/01/29 PHP
PHP 的ArrayAccess接口 像数组一样来访问你的PHP对象
2010/10/12 PHP
php调用方法mssql_fetch_row、mssql_fetch_array、mssql_fetch_assoc和mssql_fetch_objcect读取数据的区别
2012/08/08 PHP
修改apache配置文件去除thinkphp url中的index.php
2014/01/17 PHP
php函数连续调用实例分析
2015/07/30 PHP
PHP+Mysql+jQuery文件下载次数统计实例讲解
2015/10/10 PHP
ThinkPHP框架实现的MySQL数据库备份功能示例
2018/05/24 PHP
jquery星级插件、支持页面中多次使用
2012/03/25 Javascript
JavaScript 匿名函数和闭包介绍
2015/04/13 Javascript
微信小程序实现签到功能
2018/10/31 Javascript
vue项目实现多语言切换的思路
2020/09/17 Javascript
[36:13]Mineski vs iG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
[01:06:59]完美世界DOTA2联赛PWL S2 Magma vs FTD 第一场 11.29
2020/12/02 DOTA
详解Python如何获取列表(List)的中位数
2016/08/12 Python
Python 装饰器使用详解
2017/07/29 Python
Python Socket实现简单TCP Server/client功能示例
2017/08/05 Python
Python基于多线程实现抓取数据存入数据库的方法
2018/06/22 Python
对numpy中的transpose和swapaxes函数详解
2018/08/02 Python
简单了解python反射机制的一些知识
2019/07/13 Python
Python实现基于SVM的分类器的方法
2019/07/19 Python
Python内存映射文件读写方式
2020/04/24 Python
迪拜航空官方网站:flydubai
2017/04/20 全球购物
英国受欢迎的运动鞋和街头服装商店:Footasylum
2018/06/12 全球购物
财务管理专业应届毕业生求职信
2013/09/22 职场文书
即兴演讲稿
2014/01/04 职场文书
经济管理毕业生求职信
2014/03/15 职场文书
《神奇的克隆》教学反思
2014/04/10 职场文书
幼儿园标语大全
2014/06/19 职场文书
群众路线剖析材料
2014/09/30 职场文书
入党积极分子考察意见
2015/06/02 职场文书
HTML+css盒子模型案例(圆,半圆等)“border-radius” 简单易上手
2021/05/10 HTML / CSS
实例讲解Python中sys.argv[]的用法
2021/06/03 Python
MySQL分区表实现按月份归类
2021/11/01 MySQL
springboot layui hutool Excel导入的实现
2022/03/31 Java/Android
Java实战之课程信息管理系统的实现
2022/04/01 Java/Android