如何在 GridView Yii2 中创建条件
How to make condition inside GridView Yii2
我这里有问题。
我想在 GridView
中添加一个条件
<?= GridView::widget([
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'columns' => [
['class' => 'yii\grid\SerialColumn'],
'table_column1',
'table_column2',
//CONDITION HERE
if(condition){
//BUTTON HERE
} else {
//TOOLS COLUMN HERE
}
],
]); ?>
我该怎么做?
如果你需要两个 gridview 一个替代另一个,一个简单的方法是基于备用 $column 内容
if ( condition) {
$columns = [
['class' => 'yii\grid\SerialColumn'],
'table_column1',
'table_column2',
[
'attribute'=>'your_att',
'header'=>'your_header',
'format'=>'raw',
'value' => function($model, $key, $index)
{
return '<button class="btn green">Y</button>';
},
],
],
} else {
$columns = [
['class' => 'yii\grid\SerialColumn'],
'table_column1',
'table_column2',
['class' => 'yii\grid\ActionColumn',
],
}
}
echo GridView::widget([
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'columns' => $columns
]); ?>
否则使用原始列类型的值函数,您可以 return 每个特定行所需的代码..
如果您只需要 show/hide 一些基于特定条件的列,您可以使用 $visible
属性:
<?= GridView::widget([
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'columns' => [
['class' => 'yii\grid\SerialColumn'],
'table_column1',
'table_column2',
[
'name' => 'some_column1',
'visible' => $condition,
],
[
'name' => 'some_column2',
'visible' => !$condition,
],
],
]); ?>
基于 $condition
,只有两列(some_column1
或 some_column1
)中的一列可见。
[
'class' => 'kartik\grid\EditableColumn',
'attribute' => 'status',
'label'=>'Status',
'filterType' => \kartik\grid\GridView::FILTER_SELECT2,
'filter' => ArrayHelper::map(\app\models\PropertyStatus::find()->all(), 'status', 'status'),
'filterWidgetOptions' => [
'theme' => Select2::THEME_BOOTSTRAP,
'pluginOptions' => [
'allowClear' => true,
],
],
'filterInputOptions' => ['placeholder' => 'All...'],
'format'=>'raw',
//'options' => ['style' => 'width: 8%'],
'editableOptions'=> function ($model, $key, $index, $widget) {
if(Yii::$app->user->can('property/status')){
$appttypes = ArrayHelper::map(\app\models\PropertyStatus::find()->all(), 'status', 'status');
return [
'header' => 'Status',
'attribute' => 'status',
'asPopover' => false,
'inlineSettings' => [
'closeButton' => '<button class="btn btn-sm btn-danger kv-editable-close kv-editable-submit" title="Cancel Edit"><i class="fa fa-times-circle"></i></button>'
],
'type' => 'primary',
//'size'=> 'lg',
'size' => 'md',
'options' => ['class'=>'form-control', 'placeholder'=>'Enter person name...'],
'inputType' => Editable::INPUT_DROPDOWN_LIST,
'displayValueConfig' => $appttypes,
'data' => $appttypes,
'formOptions'=> ['action' => ['/ajax/update-property-status']] // point to new action
];
}
},
],
这里是简单的 if else 条件 inside gridview
<?= GridView::widget([
'dataProvider' => $dataProvider,
'columns' => [
['class' => 'yii\grid\SerialColumn'],
//'id',
'event_id',
//'img:ntext',
//'path:ntext',
//'type',
//'description:ntext',
[
'attribute' => 'type',
'value'=> function($data){
if($data->type == 0){
$info = 'Empty';
}
if($data->type == 1){
$info = 'One';
}
if($data->type == 2){
$info = 'Two';
}
return $info;
},
'format'=>'html',
],
['class' => 'yii\grid\ActionColumn'],
],
]); ?>
我这里有问题。
我想在 GridView
<?= GridView::widget([
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'columns' => [
['class' => 'yii\grid\SerialColumn'],
'table_column1',
'table_column2',
//CONDITION HERE
if(condition){
//BUTTON HERE
} else {
//TOOLS COLUMN HERE
}
],
]); ?>
我该怎么做?
如果你需要两个 gridview 一个替代另一个,一个简单的方法是基于备用 $column 内容
if ( condition) {
$columns = [
['class' => 'yii\grid\SerialColumn'],
'table_column1',
'table_column2',
[
'attribute'=>'your_att',
'header'=>'your_header',
'format'=>'raw',
'value' => function($model, $key, $index)
{
return '<button class="btn green">Y</button>';
},
],
],
} else {
$columns = [
['class' => 'yii\grid\SerialColumn'],
'table_column1',
'table_column2',
['class' => 'yii\grid\ActionColumn',
],
}
}
echo GridView::widget([
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'columns' => $columns
]); ?>
否则使用原始列类型的值函数,您可以 return 每个特定行所需的代码..
如果您只需要 show/hide 一些基于特定条件的列,您可以使用 $visible
属性:
<?= GridView::widget([
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'columns' => [
['class' => 'yii\grid\SerialColumn'],
'table_column1',
'table_column2',
[
'name' => 'some_column1',
'visible' => $condition,
],
[
'name' => 'some_column2',
'visible' => !$condition,
],
],
]); ?>
基于 $condition
,只有两列(some_column1
或 some_column1
)中的一列可见。
[
'class' => 'kartik\grid\EditableColumn',
'attribute' => 'status',
'label'=>'Status',
'filterType' => \kartik\grid\GridView::FILTER_SELECT2,
'filter' => ArrayHelper::map(\app\models\PropertyStatus::find()->all(), 'status', 'status'),
'filterWidgetOptions' => [
'theme' => Select2::THEME_BOOTSTRAP,
'pluginOptions' => [
'allowClear' => true,
],
],
'filterInputOptions' => ['placeholder' => 'All...'],
'format'=>'raw',
//'options' => ['style' => 'width: 8%'],
'editableOptions'=> function ($model, $key, $index, $widget) {
if(Yii::$app->user->can('property/status')){
$appttypes = ArrayHelper::map(\app\models\PropertyStatus::find()->all(), 'status', 'status');
return [
'header' => 'Status',
'attribute' => 'status',
'asPopover' => false,
'inlineSettings' => [
'closeButton' => '<button class="btn btn-sm btn-danger kv-editable-close kv-editable-submit" title="Cancel Edit"><i class="fa fa-times-circle"></i></button>'
],
'type' => 'primary',
//'size'=> 'lg',
'size' => 'md',
'options' => ['class'=>'form-control', 'placeholder'=>'Enter person name...'],
'inputType' => Editable::INPUT_DROPDOWN_LIST,
'displayValueConfig' => $appttypes,
'data' => $appttypes,
'formOptions'=> ['action' => ['/ajax/update-property-status']] // point to new action
];
}
},
],
这里是简单的 if else 条件 inside gridview
<?= GridView::widget([
'dataProvider' => $dataProvider,
'columns' => [
['class' => 'yii\grid\SerialColumn'],
//'id',
'event_id',
//'img:ntext',
//'path:ntext',
//'type',
//'description:ntext',
[
'attribute' => 'type',
'value'=> function($data){
if($data->type == 0){
$info = 'Empty';
}
if($data->type == 1){
$info = 'One';
}
if($data->type == 2){
$info = 'Two';
}
return $info;
},
'format'=>'html',
],
['class' => 'yii\grid\ActionColumn'],
],
]); ?>