Maison  >  Article  >  développement back-end  >  Explication détaillée de deux méthodes d'implémentation de la pagination dans Yii

Explication détaillée de deux méthodes d'implémentation de la pagination dans Yii

高洛峰
高洛峰original
2017-01-16 13:40:301747parcourir

Il existe deux façons d'implémenter la pagination dans Yii, l'une consiste à utiliser DAO et l'autre consiste à l'implémenter dans des widgets

Chacune a ses propres avantages. , et le second est plus efficace. Vous pouvez utiliser la table intégrée, ce qui est plus pratique.

1 DAO implémente la pagination.

[Couche contrôleur. ]

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 Layer]

<?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));
?>

Avantages : l'efficacité du DAO est élevée ; Inconvénients : la couche de visualisation doit écrire certains styles par elle-même, ce qui est un peu gênant

2. Le widget implémente la pagination

[couche de modèle]

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

[Couche de contrôleur]

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

[ Voir la couche]

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

Avantages : peut être utilisé dans le style intégré ; Inconvénients : efficacité légèrement faible

Ce qui précède est l'intégralité du contenu de cet article. à l'apprentissage de chacun, et j'espère également que tout le monde soutiendra le site Web PHP chinois.

Pour des explications plus détaillées sur les deux méthodes de pagination dans Yii, veuillez faire attention au site Web PHP chinois pour les articles connexes !

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn