yii2:Custom Gridview 在表单视图中的分页
yii2:Custom Pagination for Gridview in form view
我在 _form.php
文件中包含了 Gridview 小部件,它运行良好。问题是过滤器和分页。
<?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.
中同时使用过滤器和分页
任何解决方案将不胜感激。
谢谢
我没有使用 Yii2 的经验,但如果它与 1 相似..
为什么要声明 dataProvider
两次?我想第一个是能够自定义页面大小。
那么会发生什么情况是您使用一个数据提供程序来设置分页,然后将另一个数据提供程序传递给 table。
其次,我不知道您的模型在内部看起来如何,但是..
因为我可以看到 search()
方法 returns a dataProvider
,你应该改变里面的分页。
或者我认为您可以在 search()
方法 returns 和 dataProvider
之后立即更改它,例如:
$searchModel = New \app\models\ServiceChargesSearch();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
$dataProvider->pagination->pageSize=5;
因此您不需要之前声明的 dataProvider
的第一个实例。
至于过滤器,我不知道你的 ServiceChargesSearch::search
功能
的具体表现如何
但是在 Yii1 中你通常:
1) Define model 2) Fill it up with data from $_GET
3) Pass
$model->search()
to grid
如果过滤器仍然不起作用,您可以提供模型中的代码。
我在控制器中是这样做的:
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,
]);
}
我在 _form.php
文件中包含了 Gridview 小部件,它运行良好。问题是过滤器和分页。
<?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.
中同时使用过滤器和分页任何解决方案将不胜感激。
谢谢
我没有使用 Yii2 的经验,但如果它与 1 相似..
为什么要声明 dataProvider
两次?我想第一个是能够自定义页面大小。
那么会发生什么情况是您使用一个数据提供程序来设置分页,然后将另一个数据提供程序传递给 table。
其次,我不知道您的模型在内部看起来如何,但是..
因为我可以看到 search()
方法 returns a dataProvider
,你应该改变里面的分页。
或者我认为您可以在 search()
方法 returns 和 dataProvider
之后立即更改它,例如:
$searchModel = New \app\models\ServiceChargesSearch();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
$dataProvider->pagination->pageSize=5;
因此您不需要之前声明的 dataProvider
的第一个实例。
至于过滤器,我不知道你的 ServiceChargesSearch::search
功能
但是在 Yii1 中你通常:
1) Define model 2) Fill it up with data from
$_GET
3) Pass$model->search()
to grid
如果过滤器仍然不起作用,您可以提供模型中的代码。
我在控制器中是这样做的:
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,
]);
}