web-dev-qa-db-fra.com

Yii2: Supprimer "(non défini)" dans GridView et DetailView pour les valeurs NULL

Comment supprimer ou remplacer des chaînes (not set) dans GridView et ListView?

19
robsch

Deux façons que je connais (maintenant):

Formatter

Définissez nullDisplay of Formatter sur autre chose que null. Vous pouvez le faire en configuration globale ou pour un seul GridView ou DetailView.

Globalement (généralement dans les fichiers config/web.php ou <application>/config/main.php):

'components' => [
    ...
    'formatter' => [
        'class' => 'yii\i18n\Formatter',
        'nullDisplay' => '',
    ],
    ...
],

Dans certains GridView (idem avec DetailView):

<?= GridView::widget([
    'dataProvider' => $myProvider,
    'formatter' => ['class' => 'yii\i18n\Formatter','nullDisplay' => ''],
    'columns'      => [
        ...
    ],
]); ?>

Définir la valeur

Probablement pas si élégant. Dans un certain 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 '';
                }
            },
        ],
        ...
    ],
]); ?>

Ou dans un certain 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) : '',
        ],
        ...
    ],
]) ?>

Deux allusions

Si plusieurs approches sont utilisées simultanément: le réglage de la valeur (directement ou par fonction) annule la configuration du formateur Grid/DetailView, ce qui annule celui de la configuration globale du formateur.

Vous pouvez également définir quelque chose de différent d'une chaîne vide. Par exemple. si bootstrap est utilisé, vous pouvez utiliser \yii\bootstrap\Html::icon('question-sign') (ou '<span class="glyphicon glyphicon-question-sign"></span>') pour obtenir un symbole pour les valeurs manquantes.

54
robsch

Définissez emptycell dans gridview config:

<?= GridView::widget([
  'dataProvider' => $dataProvider,
  'filterModel' => $searchModel,
  'emptyCell'=>'-',
  'columns' => [
      ['class' => 'yii\grid\SerialColumn'],
.........
      ['class' => 'yii\grid\ActionColumn'],
  ],
 ]); ?>

ou dans:

  'attribute' => 'description',
  'label' => Yii::t('app', 'description'),
  'value' => function($data) {
         return !empty($data->description) ? $data->description : '-';
   }
1
mohsen

pour 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;
0
Avia Barsik

utilisez ceci: 

use Yii;

...

Yii::$app->formatter->nullDisplay = 'N\A';
0
Mohsen Noori