kartik example custom column activedataprovider gridview view yii2 detailview

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'';