example - Yii2: eliminar "(no establecido)" en GridView y DetailView para valores nulos
yii2 gridview example (5)
Dos formas que conozco (ahora):
Formateador
Establezca nullDisplay of Formatter en un valor distinto de null. Puede hacer esto en la configuración global o para el único GridView o DetailView.
A nivel mundial (normalmente en los config/web.php
o <application>/config/main.php
):
''components'' => [
...
''formatter'' => [
''class'' => ''yii/i18n/Formatter'',
''nullDisplay'' => '''',
],
...
],
En cierto GridView (igual con DetailView):
<?= GridView::widget([
''dataProvider'' => $myProvider,
''formatter'' => [''class'' => ''yii/i18n/Formatter'',''nullDisplay'' => ''''],
''columns'' => [
...
],
]); ?>
Establecer el valor
Probablemente no sea tan elegante. En un cierto 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 '''';
}
},
],
...
],
]); ?>
O en cierto 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) : '''',
],
...
],
]) ?>
Dos pistas
Si se utilizan varios enfoques al mismo tiempo: establecer el valor (directamente o por función) anula la configuración del formateador de la Vista de cuadrícula / Detail, y esto a su vez anula una configuración de formateador global.
También puedes definir algo diferente a una cadena vacía. Por ejemplo, si se utiliza bootstrap, es posible que desee usar /yii/bootstrap/Html::icon(''question-sign'')
(o ''<span class="glyphicon glyphicon-question-sign"></span>''
) para obtener Un símbolo para los valores perdidos.
¿Cómo puedo eliminar o reemplazar cadenas (not set)
en mi GridView y ListView?
Establecer emptycell en la configuración de gridview:
<?= GridView::widget([
''dataProvider'' => $dataProvider,
''filterModel'' => $searchModel,
''emptyCell''=>''-'',
''columns'' => [
[''class'' => ''yii/grid/SerialColumn''],
.........
[''class'' => ''yii/grid/ActionColumn''],
],
]); ?>
o en:
''attribute'' => ''description'',
''label'' => Yii::t(''app'', ''description''),
''value'' => function($data) {
return !empty($data->description) ? $data->description : ''-'';
}
Yo no recomendaría establecer el método nullDisplay. Es mejor verificar si la variable a la que accede es nula o no.
yo lo haría
//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;
},
],
...
],
]); ?>
para 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;
utilizar esta:
use Yii;
...
Yii::$app->formatter->nullDisplay = ''N/A'';