user3668677
user3668677

Reputation: 13

ArrayDataProvider with CGridView pagination Yii2

have same problem like this post CArrayDataProvider with CGridView pagination Yii

Above post is in yii1 ,now yii2 release so i need same in yii2 My array is also based on user search parameters and when i m clicking on pagination then user search parameters not passing ,so wat i do?

Below is my array $retVal

yii\data\ArrayDataProvider Object
      (
        [key] => id
[allModels] => Array
    (
        [0] => Array
            (
                [id] => 1
                [date] => 2014-12-01
                [distance] => 0
            )

        [1] => Array
            (
                [id] => 2
                [date] => 2014-12-01
                [distance] => 0
            )

        [2] => Array
            (
                [id] => 3
                [date] => 2014-12-01
                [distance] => 0
            )

        [3] => Array
            (
                [id] => 4
                [date] => 2014-12-01
                [distance] => 0
            )

        [4] => Array
            (
                [id] => 5
                [date] => 2014-12-01
                [distance] => 0
            )

        [5] => Array
            (
                [id] => 6
                [date] => 2014-12-01
                [distance] => 0
            )

        [6] => Array
            (
                [id] => 7
                [date] => 2014-12-01
                [distance] => 0
            )

        [7] => Array
            (
                [id] => 8
                [date] => 2014-12-01
                [distance] => 0
            )

        [8] => Array
            (
                [id] => 9
                [date] => 2014-12-01
                [distance] => 0
            )

        [9] => Array
            (
                [id] => 10
                [date] => 2014-12-01
                [distance] => 0
            )

        [10] => Array
            (
                [id] => 11
                [date] => 2014-12-01
                [distance] => 0
            )
         )

[id] => 
[_sort:yii\data\BaseDataProvider:private] => yii\data\Sort Object
    (
        [enableMultiSort] => 
        [attributes] => Array
            (
            )

        [sortParam] => sort
        [defaultOrder] => Array
            (
            )

        [route] => 
        [separator] => ,
        [params] => 
        [urlManager] => 
        [_attributeOrders:yii\data\Sort:private] => 
    )

[_pagination:yii\data\BaseDataProvider:private] => yii\data\Pagination Object
    (
        [pageParam] => page
        [pageSizeParam] => per-page
        [forcePageParam] => 1
        [route] => 
        [params] => 
        [urlManager] => 
        [validatePage] => 1
        [totalCount] => 0
        [defaultPageSize] => 20
        [pageSizeLimit] => Array
            (
                [0] => 1
                [1] => 50
            )

        [_pageSize:yii\data\Pagination:private] => 20
        [_page:yii\data\Pagination:private] => 
    )

[_keys:yii\data\BaseDataProvider:private] => 
[_models:yii\data\BaseDataProvider:private] => 
[_totalCount:yii\data\BaseDataProvider:private] => 
[_events:yii\base\Component:private] => Array
    (
    )

[_behaviors:yii\base\Component:private] => 
)

Below is my arraydayaprovider and $retVal is array i m passing

      $dataprovider = new ArrayDataProvider([
      'allModels' => $retVal,
       'pagination' => array('pageSize' => 20),

      ]);

      return $dataprovider;
}

below is view code

             <?php

       use yii\helpers\Html;
       use kartik\grid\GridView;
       //use yii\grid\GridView;


    $this->title = Yii::t('app', 'Speed Report');
    $this->params['breadcrumbs'][] = $this->title;
    ?>
    <div class="usertype-index">
     <div class="panel panel-default">
    <div class="panel-body">
    <div class="row">
    <div class="col-lg-12">
     <?php 
      GridView::widget([
        'dataProvider'=> $dataProvider,

        'columns' =>[
        [ 'class' => '\kartik\grid\SerialColumn'],

        'time',
        'speed',
        'address',
          //['class' => '\kartik\grid\ActionColumn'],

        ],


        'panel' => [
        'heading'=>'<h3 class="panel-title"><i class="white fa fa-bar-chart"></i> Distance Report</h3>',
        'type'=>'primary',
        'before'=>Html::a(Yii::t('app', '<i class="glyphicon glyphicon-plus"></i> Generate {modelClass}', ['modelClass' => 'Report',]), ['speed-report'], ['class' => 'btn btn-primary']) ,
   // 'after'=>Html::a('<i class="glyphicon glyphicon-repeat"></i> Reset Grid', ['index'], ['class' => 'btn btn-info']),
        'showFooter'=>false,
        'pager'=>false,
        'toggleData' => false
        ],
        ]);?>


      </div>
    </div>
  </div>
</div>

Upvotes: 1

Views: 5246

Answers (1)

Kirk
Kirk

Reputation: 1845

From the docs you need to provide a key field to the dataprovider (similar to the issue you had in your previous posting).

Example:

$query = new Query;
$provider = new ArrayDataProvider([
    'key' => 'id' //make this unique identifier of your models.
    'allModels' => $query->from('post')->all(),
    'pagination' => [
        'pageSize' => 10,
    ],
]);

So in your case you'll probabaly need to add an id field to each set in $retval and do this:

  $dataprovider = new ArrayDataProvider([
  'key' => 'id', //or whatever you id actually is of these models.
  'allModels' => $retVal,
   'pagination' => array('pageSize' => 20),

  ]);

  return $dataprovider;
}

Upvotes: 0

Related Questions