详解Yii实现分页的两种方法

5年以前  |  阅读数:883 次  |  编程语言:PHP 

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分页显示制作详细讲解
SSH 登录失败:Host key verification failed
获取IMSI
将二进制数据转为16进制以便显示
获取IMEI
文件下载
贪吃蛇
双位运算符
PHP自定义函数获取搜索引擎来源关键字的方法
Java生成UUID
发送邮件
年的日历图
提取后缀名
在Zeus Web Server中安装PHP语言支持
让你成为最历害的git提交人
Yii2汉字转拼音类的实例代码
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Python 2与Python 3版本和编码的对比
php封装的page分页类完整实例