首页  >  文章  >  后端开发  >  详解Yii实现分页的两种方法

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

高洛峰
高洛峰原创
2017-01-16 13:40:301725浏览

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(&#39;delivery/view&#39;,&#39;remitdate&#39;=>$row["sumrate"]));?> 
<?php echo $row["sumrate"]."<br />" ?>
<?php endforeach;?>
<?php 
//分页widget代码: 
$this->widget(&#39;CLinkPager&#39;,array(&#39;pages&#39;=>$pages));
?>

优点: DAO效率高; 缺点: view层需要自己写一些样式,稍显麻烦一点

二. widget实现分页

[model层]

/**
   * @var string attribute : 日运费 (统计用)
   * 需要对新增加的字段做个声明
   */
  public $dayrate;
 
 
  /*
   * 统计功能: 统计每日的运费
   */
  public function statistics()
  {
    $criteria = new CDbCriteria;
    $criteria->select = &#39;remitdate, sum(rate) AS dayrate&#39;;
    $criteria->group = &#39;remitdate&#39;;
     
    return new CActiveDataProvider(get_class($this), array(
      &#39;criteria&#39;=>$criteria,
      &#39;sort&#39;=>array(
        // 表头设置点击排序的字段
        &#39;attributes&#39;=>array(
          &#39;remitdate&#39;,
          &#39;dayrate&#39;=>array(
            &#39;asc&#39;=>&#39;dayrate&#39;,
            &#39;desc&#39;=>&#39;dayrate DESC&#39;,
          )
        ),
        &#39;defaultOrder&#39;=>&#39;remitdate desc&#39;,
      ),
    ));  
  }

[Controller层]

/**
   * 运单统计功能:
   * 按日期统计
   */
  public function actionReport()
  {
    $model=new Delivery(&#39;statistics&#39;);
    $model->unsetAttributes(); // clear any default values
      
    $this->render(&#39;report&#39;,array(
      &#39;model&#39;=>$model,
    ));
  }

 [View层]

<?php $this->widget(&#39;zii.widgets.grid.CGridView&#39;, array(
  &#39;id&#39;=>&#39;delivery-grid&#39;,
  &#39;dataProvider&#39;=>$model->statistics(),
  &#39;filter&#39;=>$model,
  &#39;columns&#39;=>array(
    &#39;remitdate&#39;,
    &#39;dayrate&#39;,
    array(
      &#39;class&#39;=>&#39;CButtonColumn&#39;,
    ),
  ),
)); ?>

优点: 可以使用自带的样式; 缺点: 效率略低.

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持PHP中文网。

更多详解Yii实现分页的两种方法相关文章请关注PHP中文网!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn