Hi all,
How to make a conditional search on a pjax gridview by an ajax function call?
I start to develop Yii2 application recently. I made two searchable gridviews by Krajee’s extension in the same view and want to filter the second gridview by selecting a key from the first gridview.
My code is pasted as below.
Two tables in database:
member_family
public function attributeLabels()
{
return [
'id' => 'ID',
'householder_id' => 'Householder ID',
];
}
member_detail
public function attributeLabels()
{
return [
'id' => 'ID',
'family_id' => 'Family ID',
'name' => 'Name',
];
}
/views/memberdetail/index.php (I put these two gridviews in this page.)
// family table
Pjax::begin(); echo GridView::widget([
'dataProvider' => $dataProviderFamily,
'filterModel' => $searchModelFamily,
'columns' => [
['class' => 'yii\grid\SerialColumn'],
'id',
'householder_id',
[
'attribute' => 'Show all members',
'format' => 'raw',
'value' => function ($model) {
return '<a href="index.php?MemberDetailSearch%5Bid%5D=&MemberDetailSearch%5Bfamily_id%5D='.$model->id.'&MemberDetailSearch%5Bname%5D=" class="showdetail" myid="'.$model->id.'">Show detail</a>';
},
],
[
'class' => 'yii\grid\ActionColumn',
'buttons' => [
'update' => function ($url, $model) {
return Html::a('<span class="glyphicon glyphicon-pencil"></span>', Yii::$app->urlManager->createUrl(['memberfamily/view','id' => $model->id,'edit'=>'t']), [
'title' => Yii::t('yii', 'Edit'),
]);}
],
],
],
'responsive'=>true,
'hover'=>true,
'condensed'=>true,
'floatHeader'=>true,
'panel' => [
'heading'=>'<h3 class="panel-title"><i class="glyphicon glyphicon-th-list"></i> Family list </h3>',
'type'=>'info',
'before'=>Html::a('<i class="glyphicon glyphicon-plus"></i> Add', ['create'], ['class' => 'btn btn-success']), 'after'=>Html::a('<i class="glyphicon glyphicon-repeat"></i> Reset List', ['index'], ['class' => 'btn btn-info']),
'showFooter'=>false
],
]); Pjax::end(); ?>
<?php
// family member detail
Pjax::begin(); echo GridView::widget([
'id' => 'mytest',
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'columns' => [
['class' => 'yii\grid\SerialColumn'],
'id',
'family_id',
'name',
[
'class' => 'yii\grid\ActionColumn',
'buttons' => [
'update' => function ($url, $model) {
return Html::a('<span class="glyphicon glyphicon-pencil"></span>', Yii::$app->urlManager->createUrl(['memberdetail/view','id' => $model->id,'edit'=>'t']), [
'title' => Yii::t('yii', 'Edit'),
]);}
],
],
],
'responsive'=>true,
'hover'=>true,
'condensed'=>true,
'floatHeader'=>true,
'panel' => [
'heading'=>'<h3 class="panel-title"><i class="glyphicon glyphicon-th-list"></i> '.Html::encode($this->title).' </h3>',
'type'=>'info',
'before'=>Html::a('<i class="glyphicon glyphicon-plus"></i> Add', ['create'], ['class' => 'btn btn-success']), 'after'=>Html::a('<i class="glyphicon glyphicon-repeat"></i> Reset List', ['index'], ['class' => 'btn btn-info']),
'showFooter'=>false
],
]); Pjax::end();
?>
/controllers/MemberDetailController.php
public function actionIndex()
{
$searchModel = new MemberDetailSearch;
$dataProvider = $searchModel->search(Yii::$app->request->getQueryParams());
$searchModelFamily = new MemberFamilySearch;
$dataProviderFamily = $searchModelFamily->search(Yii::$app->request->getQueryParams());
if(!isset($_GET['ajax']))
return $this->render('index', [
'dataProvider' => $dataProvider,
'searchModel' => $searchModel,
'dataProviderFamily' => $dataProviderFamily,
'searchModelFamily' => $searchModelFamily,
]);
else
return $this->renderPartial('index', [
'dataProvider' => $dataProvider,
'searchModel' => $searchModel,
'dataProviderFamily' => $dataProviderFamily,
'searchModelFamily' => $searchModelFamily,
]);
}
Did I miss anything to do? I stuck on this issue many days, thanks!!