详解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的计数器程序
Oct 09 PHP
如何在PHP中使用Oracle数据库(4)
Oct 09 PHP
构建简单的Webmail系统
Oct 09 PHP
php面向对象全攻略 (八)重载新的方法
Sep 30 PHP
php中simplexml_load_string使用实例分享
Feb 13 PHP
使用PHP如何实现高效安全的ftp服务器(一)
Dec 20 PHP
php读取torrent种子文件内容的方法(测试可用)
May 03 PHP
PHP 数组基本操作小结(推荐)
Jun 13 PHP
常用PHP封装分页工具类
Jan 14 PHP
PHP+JS实现的实时搜索提示功能
Mar 13 PHP
laravel获取不到session的三种解决办法【推荐】
Sep 16 PHP
PHP实现简单登录界面
Oct 23 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
整理的9个实用的PHP库简介和下载
2010/11/09 PHP
ThinkPHP处理Ajax返回的方法
2014/11/22 PHP
PHP+RabbitMQ实现消息队列的完整代码
2019/03/20 PHP
让 JavaScript 轻松支持函数重载 (Part 2 - 实现)
2009/08/04 Javascript
jQuery客户端分页实例代码
2013/11/18 Javascript
js 中将多个逗号替换为一个逗号的代码
2014/06/07 Javascript
解决angular的post请求后SpringMVC后台接收不到参数值问题的方法
2015/12/10 Javascript
利用CSS3在Angular中实现动画
2016/01/15 Javascript
javascript replace()第二个参数为函数时的参数用法
2016/12/26 Javascript
JavaScript提高加载和执行效率的方法
2017/02/03 Javascript
jQuery动态生成不规则表格(前后端)
2017/02/21 Javascript
详解用webpack2搭建angular2的项目
2017/06/22 Javascript
vue2中filter()的实现代码
2017/07/09 Javascript
微信小程序之滚动视图容器的实现方法
2017/09/26 Javascript
jQuery实现所有验证通过方可提交的表单验证
2017/11/21 jQuery
微信小程序开发之tabbar图标和颜色的实现
2018/10/17 Javascript
基于jquery实现的tab选项卡功能示例【附源码下载】
2019/06/10 jQuery
关于微信小程序map组件z-index的层级问题分析
2019/07/09 Javascript
详解vuex的简单todolist例子
2019/07/14 Javascript
使用python编写批量卸载手机中安装的android应用脚本
2014/07/21 Python
python 搭建简单的http server,可直接post文件的实例
2019/01/03 Python
python面向对象 反射原理解析
2019/08/12 Python
Python 异常的捕获、异常的传递与主动抛出异常操作示例
2019/09/23 Python
Python queue队列原理与应用案例分析
2019/09/27 Python
Selenium基于PIL实现拼接滚动截图
2020/04/10 Python
java字符串格式化输出实例讲解
2021/01/06 Python
一款利用css3的鼠标经过动画显示详情特效的实例教程
2014/12/29 HTML / CSS
canvas烟花特效锦集
2018/01/17 HTML / CSS
20佳惊艳的HTML5应用程序示例分享
2011/05/03 HTML / CSS
捷克领先的户外服装及配件市场零售商:ALPINE PRO
2018/01/09 全球购物
What's the difference between deep copy and shallow copy? (深拷贝与浅拷贝有什么区别)
2015/11/10 面试题
绩效考核实施方案
2014/03/18 职场文书
干部作风整顿个人剖析材料
2014/10/06 职场文书
2016七夕情人节感言
2015/12/09 职场文书
2016简单的租房合同范本
2016/03/18 职场文书
一篇文章了解正则表达式的替换技巧
2022/02/24 Javascript