Yii2:删除 GridView 和 DetailView 中的“(not set)”以获得空值
Yii2: Remove "(not set)" in GridView and DetailView for null values
如何删除或替换我的 GridView 和 ListView 中的字符串 (not set)
?
我知道的两种方式(现在):
格式化程序
将 nullDisplay of Formatter 设置为空以外的值。您可以在全局配置或单个 GridView 或 DetailView 中执行此操作。
全局(通常在 config/web.php
或 <application>/config/main.php
文件中):
'components' => [
...
'formatter' => [
'class' => 'yii\i18n\Formatter',
'nullDisplay' => '',
],
...
],
在某些GridView中(与DetailView相同):
<?= GridView::widget([
'dataProvider' => $myProvider,
'formatter' => ['class' => 'yii\i18n\Formatter','nullDisplay' => ''],
'columns' => [
...
],
]); ?>
设置值
可能没那么优雅。在某个GridView中:
<?= GridView::widget([
'dataProvider' => $myProvider,
'columns' => [
...
[
'attribute' => 'some_attribute',
'format' => 'raw',
'value' => function (ModelClass $model) {
if ($model->some_attribute != null) {
return $model->some_attribute;
//or: return Html::encode($model->some_attribute)
} else {
return '';
}
},
],
...
],
]); ?>
或者在某个DetailView中:
<?= DetailView::widget([
'model' => $model,
'attributes' => [
...
[
'attribute' => 'some_attribute',
'value' => $model->some_attribute != null ? $model->some_attribute : '',
//or: 'value' => $model->some_attribute != null ? Html::encode($model->some_attribute) : '',
],
...
],
]) ?>
两个提示
如果同时使用几种方法:设置值(直接或通过函数)覆盖 Grid/DetailView 的格式化程序配置,这反过来又覆盖全局格式化程序配置。
您还可以定义不同于空字符串的内容。例如。如果使用 bootstrap,您可能需要使用 \yii\bootstrap\Html::icon('question-sign')
(或 '<span class="glyphicon glyphicon-question-sign"></span>'
)来获取缺失值的符号。
我不推荐 set null Display 方法。最好检查您访问的变量是否为空。
我愿意
//model code
public function getProjectName()
{
$project = $this->project;
return ($project) ? $project->name : '';
}
//your gridview
<?= GridView::widget([
'dataProvider' => $myProvider,
'columns' => [
...
[
'attribute' => 'some_attribute',
'format' => 'raw',
'value' => function (ModelClass $model) {
$model->projectName;
},
],
...
],
]); ?>
在 gridview 配置中设置空单元格:
<?= GridView::widget([
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'emptyCell'=>'-',
'columns' => [
['class' => 'yii\grid\SerialColumn'],
.........
['class' => 'yii\grid\ActionColumn'],
],
]); ?>
或在:
'attribute' => 'description',
'label' => Yii::t('app', 'description'),
'value' => function($data) {
return !empty($data->description) ? $data->description : '-';
}
对于kartik\grid\GridView
;
'class' => 'kartik\grid\EditableColumn',
'attribute'=>'myAttribute',
'header' => 'myHeader',
'editableOptions' => [
'inputType' => \kartik\editable\Editable::INPUT_TEXT,
'valueIfNull' => '-',
/**
* @var string the value to be displayed. If not set, this will default to the attribute value. If the attribute
* value is null, then this will display the value as set in [[valueIfNull]].
*/
public $displayValue;
使用这个:
use Yii;
...
Yii::$app->formatter->nullDisplay = 'N\A';
对于 DetailView 和 GridView,我在列中使用 if else
详细视图:
<?= DetailView::widget([
'model' => $model,
'attributes' => [
['label' => 'labelName', 'value' => function($data) {
if (!empty($data->tDeal->DealDate)) {
return $data->tDeal->DealDate;
} else { return ''; }
}],
],
])
?>
网格视图:
<?= GridView::widget([
'dataProvider' => $dataProvider,
'columns' => [
['label' => 'labelName', 'value' => function($data) {
if (!empty($data->tDeal->DealDate)) {
return $data->tDeal->DealDate;
} else { return ''; }
}],
],
])
?>
如何删除或替换我的 GridView 和 ListView 中的字符串 (not set)
?
我知道的两种方式(现在):
格式化程序
将 nullDisplay of Formatter 设置为空以外的值。您可以在全局配置或单个 GridView 或 DetailView 中执行此操作。
全局(通常在 config/web.php
或 <application>/config/main.php
文件中):
'components' => [
...
'formatter' => [
'class' => 'yii\i18n\Formatter',
'nullDisplay' => '',
],
...
],
在某些GridView中(与DetailView相同):
<?= GridView::widget([
'dataProvider' => $myProvider,
'formatter' => ['class' => 'yii\i18n\Formatter','nullDisplay' => ''],
'columns' => [
...
],
]); ?>
设置值
可能没那么优雅。在某个GridView中:
<?= GridView::widget([
'dataProvider' => $myProvider,
'columns' => [
...
[
'attribute' => 'some_attribute',
'format' => 'raw',
'value' => function (ModelClass $model) {
if ($model->some_attribute != null) {
return $model->some_attribute;
//or: return Html::encode($model->some_attribute)
} else {
return '';
}
},
],
...
],
]); ?>
或者在某个DetailView中:
<?= DetailView::widget([
'model' => $model,
'attributes' => [
...
[
'attribute' => 'some_attribute',
'value' => $model->some_attribute != null ? $model->some_attribute : '',
//or: 'value' => $model->some_attribute != null ? Html::encode($model->some_attribute) : '',
],
...
],
]) ?>
两个提示
如果同时使用几种方法:设置值(直接或通过函数)覆盖 Grid/DetailView 的格式化程序配置,这反过来又覆盖全局格式化程序配置。
您还可以定义不同于空字符串的内容。例如。如果使用 bootstrap,您可能需要使用 \yii\bootstrap\Html::icon('question-sign')
(或 '<span class="glyphicon glyphicon-question-sign"></span>'
)来获取缺失值的符号。
我不推荐 set null Display 方法。最好检查您访问的变量是否为空。
我愿意
//model code
public function getProjectName()
{
$project = $this->project;
return ($project) ? $project->name : '';
}
//your gridview
<?= GridView::widget([
'dataProvider' => $myProvider,
'columns' => [
...
[
'attribute' => 'some_attribute',
'format' => 'raw',
'value' => function (ModelClass $model) {
$model->projectName;
},
],
...
],
]); ?>
在 gridview 配置中设置空单元格:
<?= GridView::widget([
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'emptyCell'=>'-',
'columns' => [
['class' => 'yii\grid\SerialColumn'],
.........
['class' => 'yii\grid\ActionColumn'],
],
]); ?>
或在:
'attribute' => 'description',
'label' => Yii::t('app', 'description'),
'value' => function($data) {
return !empty($data->description) ? $data->description : '-';
}
对于kartik\grid\GridView
;
'class' => 'kartik\grid\EditableColumn',
'attribute'=>'myAttribute',
'header' => 'myHeader',
'editableOptions' => [
'inputType' => \kartik\editable\Editable::INPUT_TEXT,
'valueIfNull' => '-',
/**
* @var string the value to be displayed. If not set, this will default to the attribute value. If the attribute
* value is null, then this will display the value as set in [[valueIfNull]].
*/
public $displayValue;
使用这个:
use Yii;
...
Yii::$app->formatter->nullDisplay = 'N\A';
对于 DetailView 和 GridView,我在列中使用 if else
详细视图:
<?= DetailView::widget([
'model' => $model,
'attributes' => [
['label' => 'labelName', 'value' => function($data) {
if (!empty($data->tDeal->DealDate)) {
return $data->tDeal->DealDate;
} else { return ''; }
}],
],
])
?>
网格视图:
<?= GridView::widget([
'dataProvider' => $dataProvider,
'columns' => [
['label' => 'labelName', 'value' => function($data) {
if (!empty($data->tDeal->DealDate)) {
return $data->tDeal->DealDate;
} else { return ''; }
}],
],
])
?>