2016-12-02 5 views
2

enter image description hereWie wird die Anzahl der Elemente festgelegt, die in der yii2-Rasteransicht angezeigt werden sollen?

Controller-Code:

public function actionIndex() { 
     $searchModel = new ProductSearch(); 
     if (Yii::$app->request->get('per-page') !== NULL) { 
      $searchModel->_pageSize = Yii::$app->request->get('per-page'); 
     } 
     if ($searchModel->load(Yii::$app->request->post())) { 
      $searchModel->_pageSize = intval(Yii::$app->request->post()['ProductSearch']['_pageSize']); 
      $_SESSION['page_size'] = $searchModel->_pageSize; 
     } 


      if (isset($_SESSION['page_size'])) 
      { 
       $dataProvider = $searchModel->search(Yii::$app->request->queryParams, null ,$_SESSION['page_size']); 
      } 
      else 
      { 
       $dataProvider = $searchModel->search(Yii::$app->request->queryParams, null, 20); 
      } 
      $dataProvider->pagination->pageSize=10; 
      $this->layout = 'main_ecommerce'; 
      return $this->render('index', [ 
         'searchModel' => $searchModel, 
         'dataProvider' => $dataProvider, 

      ]); 

anzeigen Code:

if (isset($_SESSION['page_size'])) 
       { 
       $searchModel->_pageSize = $_SESSION['page_size']; 
       } 
       Pjax::begin(); 
       $form = ActiveForm::begin(); 
       echo $form->field($searchModel, '_pageSize', [ 
          'inputOptions' => [ 
            'placeholder' => 'records', 
            'style' => 'overflow-x: auto;', 
            'class' => 'form-control input-xsmall input-inline' ], 
         ])->label(Yii::t('app', 'Records : ')) 
         ->dropDownList(['10'=> 10, '20' => 20, '50' => 50], ['onchange'=>"this.form.submit();"]); 
       ActiveForm::end(); 
       Pjax::end(); 
       echo $searchModel->_pageSize; 
       ?> 
      <?= GridView::widget([ 
     'dataProvider' => $dataProvider, 
     'filterModel' => $searchModel,     
     'pager' => [ 
      'options'=>['class'=>'pagination'], 
      'prevPageLabel' => Html::tag('i', "", ['class' => 'fa fa-angle-left']), 
      'nextPageLabel' => Html::tag('i', "", ['class' => 'fa fa-angle-right']), 
      'firstPageLabel'=>Html::tag('i', "", ['class' => 'fa fa-angle-double-left']), 
      'lastPageLabel'=> Html::tag('i', "", ['class' => 'fa fa-angle-double-right']), 
     ], 
     'columns' => [ 
      ['class' => 'yii\grid\SerialColumn'], 

Das Bild zeigt, dass die Gridview nur 30 Zeilen von Datensätzen angezeigt wird. Wie kann ich das einstellen, damit ich z. B. 50 Datensätze pro Seite anzeigen kann? Irgendwie, wenn ich es einmal eingestellt habe, zeigt es einen niedrigeren Wert als den, den ich eingestellt habe. Warum das?

+1

können Sie die Seitengröße ändern http://stackoverflow.com/questions/30570159/how-to-set-page-size-in-gridview-in-yii2/30572032#30572032 – scaisEdge

+0

@scaisEdge ich habe versucht das, aber es zeigt nicht die Nummer, die ich will. Ich zeige weniger. Wenn ich beispielsweise $ dataProvider-> pagination-> pageSize = 15; einstelle, werden nur 9 Zeilen angezeigt. es zeigt weniger Zeile als die, die ich angegeben – CloudSeph

+0

warum Sie für page_size überprüfen und nicht die normalen yii2 Funktionen dafür verwenden? .. – scaisEdge

Antwort

0

Versuchen Sie es mit

$dataProvider->pagination->pageSize=10; 

in actionIndex, bevor Sie searchmodel und Dataprovider

zum Beispiel zurück:

$searchModel = new UserMasterSearch(); 
    $dataProvider = $searchModel->search(Yii::$app->request->post()); 

    $dataProvider->pagination->pageSize=10; 

    return $this->render('index', [ 
     'searchModel' => $searchModel, 
     'dataProvider' => $dataProvider, 
    ]); 
+0

Ich tat das, aber es gibt nur 6 Datensätze anstelle von 10. Warum ist das ? – CloudSeph

+0

Sind Sie sicher, dass Sie mehr als 10 Datensätze aus db wiederherstellen? Wenn nur 6 Datensätze verfügbar sind, werden 6 Datensätze angezeigt, selbst wenn die Seitengröße 10 ist. – rushil

+0

Können Sie den Code Ihres Controllers anzeigen und die Seite anzeigen, um bessere Lösungen zu erhalten. – rushil

0

Versuchen Sie einfach

public function actionIndex() { 

     $searchModel = new ProductSearch(); 
     $dataProvider = $searchModel->search(Yii::$app->request->queryParams); 


     $dataProvider->pagination->pageSize=10; 
     $this->layout = 'main_ecommerce'; 
     return $this->render('index', [ 
        'searchModel' => $searchModel, 
        'dataProvider' => $dataProvider, 

     ]); 

und für Ansicht

<?= GridView::widget([ 
    'dataProvider' => $dataProvider, 
    'filterModel' => $searchModel,     
    'pager' => [ 
     'options'=>['class'=>'pagination'], 
     'prevPageLabel' => Html::tag('i', "", ['class' => 'fa fa-angle-left']), 
     'nextPageLabel' => Html::tag('i', "", ['class' => 'fa fa-angle-right']), 
     'firstPageLabel'=>Html::tag('i', "", ['class' => 'fa fa-angle-double-left']), 
     'lastPageLabel'=> Html::tag('i', "", ['class' => 'fa fa-angle-double-right']), 
    ], 
    'columns' => [ 
     ['class' => 'yii\grid\SerialColumn'], 
+0

nicht erwähnt werden, es zeigt immer noch das gleiche Problem. anstelle der hartcodierten 10 zeigt es nur 6 Datensätze. nur für Sie Informationen Ich habe 20.000 Datensätze, so ist es nicht, weil ich weniger als 10 Datensätze haben – CloudSeph

+0

Antwort aktualisiert .. für einen richtigen DataProvider .. lass es mich wissen – scaisEdge

Verwandte Themen