详解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+mysql来做一个功能强大的在线计算器
Oct 12 PHP
php在页面中调用fckeditor编辑器的方法
Jun 10 PHP
PHP简洁函数小结
Aug 12 PHP
php实现把url转换迅雷thunder资源下载地址的方法
Nov 07 PHP
thinkphp中session和cookie无效的解决方法
Dec 19 PHP
php连接与操作PostgreSQL数据库的方法
Dec 25 PHP
ThinkPHP框架里隐藏index.php
Apr 12 PHP
php实现批量上传数据到数据库(.csv格式)的案例
Jun 18 PHP
PHP封装类似thinkphp连贯操作数据库Db类与简单应用示例
May 08 PHP
PHP token验证生成原理实例分析
Jun 05 PHP
php实现快速对二维数组某一列进行组装的方法小结
Dec 04 PHP
PHP实现简单的协程任务调度demo示例
Feb 01 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创建多级目录的两种方法
2016/10/28 PHP
PHP实现随机数字、字母的验证码功能
2018/08/01 PHP
JavaScript加密解密7种方法总结分析
2007/10/07 Javascript
javascript 限制输入和粘贴(IE,firefox测试通过)
2008/11/14 Javascript
ASP SQL防注入的方法
2008/12/25 Javascript
WordPress 照片lightbox效果的运用几点
2009/06/22 Javascript
两个select之间option的互相添加操作(jquery实现)
2009/11/12 Javascript
基于jquery的textarea发布框限制文字字数输入(添加中文识别)
2012/02/16 Javascript
javascript:文字不间断向左移动的实例代码
2013/08/08 Javascript
转换字符串为json对象的方法详解
2013/11/29 Javascript
php实例分享之实现显示网站运行时间
2014/05/20 Javascript
使用jQuery加载html页面到指定的div实现方法
2016/07/13 Javascript
js中scrollTop()方法和scroll()方法用法示例
2016/10/03 Javascript
thinkphp标签实现bootsrtap轮播carousel实例代码
2017/02/19 Javascript
用angular实现多选按钮的全选与反选实例代码
2017/05/23 Javascript
vue项目打包后打开页面空白解决办法
2018/06/29 Javascript
10行代码实现微信小程序滑动tab切换
2018/12/28 Javascript
vue操作dom元素的3种方法示例
2020/09/20 Javascript
jQuery实现本地存储
2020/12/22 jQuery
vue中父子组件的参数传递和应用示例
2021/01/04 Vue.js
python操作excel文件并输出txt文件的实例
2018/07/10 Python
python面向对象入门教程之从代码复用开始(一)
2018/12/11 Python
如何查看Django ORM执行的SQL语句的实现
2020/04/20 Python
Python定时任务框架APScheduler原理及常用代码
2020/10/05 Python
Python的logging模块基本用法
2020/12/24 Python
拉斯维加斯酒店、演出、旅游、俱乐部及更多:Vegas.com
2019/02/28 全球购物
如何向接受结构参数的函数传入常数值
2016/02/17 面试题
Delphi笔试题
2016/11/14 面试题
护理专业本科生自荐信
2013/10/01 职场文书
推荐信模板
2014/05/09 职场文书
奥运会口号
2014/06/13 职场文书
离婚协议书格式范本
2016/03/18 职场文书
Python标准库之typing的用法(类型标注)
2021/06/02 Python
JavaGUI模仿QQ聊天功能完整版
2021/07/04 Java/Android
微软发布Windows 11今年最大更新22H2(附 ISO 镜像官方下载)
2022/09/23 数码科技