>백엔드 개발 >PHP 튜토리얼 >Yii에서 페이징을 구현하는 두 가지 방법에 대한 자세한 설명

Yii에서 페이징을 구현하는 두 가지 방법에 대한 자세한 설명

高洛峰
高洛峰원래의
2017-01-16 13:40:301782검색

Yii에서 페이징을 구현하는 방법은 두 가지가 있는데, 하나는 DAO를 사용하는 것이고, 다른 하나는 위젯에 구현하는 것입니다.

각각의 장점이 있습니다. , 두 번째가 더 효율적입니다. 내장 테이블을 사용하면 더 편리합니다.

1. DAO는 페이징을 구현합니다.

[컨트롤러 레이어] ]

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, 
    ));
  }

[뷰 레이어]

<?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 효율성이 높다. 단점: 뷰 레이어가 일부 스타일을 자체적으로 작성해야 하므로 약간 번거롭다

2. 페이징을 구현하는 위젯

[모델 레이어]

/**
   * @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;,
      ),
    ));  
  }

[컨트롤러 레이어]

/**
   * 运单统计功能:
   * 按日期统计
   */
  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,
    ));
  }

[뷰 레이어]

<?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으로 문의하세요.