yii2:表单视图中Gridview的自定义分页

时间:2015-02-04 17:16:20

标签: php gridview pagination yii2

我已将Gridview小部件包含在 _form.php 文件中,该文件运行良好。问题是过滤器和分页。

<?php
$dataProvider = new ActiveDataProvider([
    'query' => \app\models\ServiceCharges::find(),
    'pagination' => [
        'pageSize' => 5,
    ],
]);

 ?>
    <?php  
   $searchModel = New \app\models\ServiceChargesSearch(); 
   $dataProvider = $searchModel->search(Yii::$app->request->queryParams);

   ?>

        </div>
</div>
<div>
    <?= GridView::widget([
        'dataProvider' => $dataProvider,
        'filterModel' => $searchModel,
        'columns' => [
            ['class' => 'yii\grid\SerialColumn'],

           'id',
           'service_name',                
           'room_category',
           'charges_cash',
           'charges_cashless',

            ['class' => 'yii\grid\ActionColumn'],
        ],
    ]); ?>

    </div> 

如果我将$dataprovider分页部分放在$searchmodel下方,则分页工作正常,但过滤器不起作用,反之亦然。

如何在_form.php中同时使用过滤器和分页。

任何解决方案都将不胜感激。

由于

2 个答案:

答案 0 :(得分:14)

我对Yii2没有经验,但是如果它与1相似......

你为什么两次声明dataProvider?我想第一个是能够自定义页面大小。

那么会发生什么呢?您使用一个数据提供程序来设置分页,然后将另一个数据提供程序传递给表。

其次我不知道你的模型在内部看起来如何......

由于我可以看到search()方法返回dataProvider,因此您应该更改其中的分页。

或者我认为您可以在search()方法返回dataProvider之后立即更改它:

$searchModel = New \app\models\ServiceChargesSearch(); 
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
$dataProvider->pagination->pageSize=5;

因此,您不需要之前声明过的dataProvider的第一个实例。

对于过滤器,我不知道它是如何完全符合您的ServiceChargesSearch::search功能

但在Yii1中你通常会:

  

1)定义模型2)用来自$_GET 3)Pass的数据填充   $model->search()到网格

如果过滤器仍然不起作用,您可以提供模型中的代码。

答案 1 :(得分:0)

我在控制器中这样做:

public function actionIndex()
{
    $searchModel = new YourModels();
    $dataProvider = $searchModel->search(Yii::$app->request->queryParams);
    $dataProvider->pagination->pageSize = 10;

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