Yiii2: Supprimer "(Non défini) " dans GridView et DetailView pour les valeurs nulles

Comment puis-je supprimer ou remplacer des chaînes <!-- Dans mon GridView et ListView?

18
demandé sur robsch 2015-05-28 17:03:05

5 réponses

Deux façons que je sais (maintenant):

Formateur

Set nullDisplay de Formateur à quelque chose d'autre que nul. Vous pouvez le faire en configuration globale ou pour GridView ou DetailView.

globalement (typiquement en config/web.php ou <application>/config/main.php fichiers):

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

Dans certains GridView (même avec fenêtre detravail):

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

Définir la valeur

Probablement pas le cas é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 une certaine fenêtre detravail:

<?= 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 indices

si plusieurs approches sont utilisées en même temps: définir la valeur (directement ou par fonction) l'emporte sur la configuration du formateurgrid/DetailView, ce qui l'emporte sur une configuration globale du formateurgrid / DetailView.

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

49
répondu robsch 2018-06-01 09:45:36

Définir emptycell dans gridview config:

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

ou :

  'attribute' => 'description',
  'label' => Yii::t('app', 'description'),
  'value' => function($data) {
         return !empty($data->description) ? $data->description : '-';
   }
1
répondu mohsen 2018-07-26 13:08:53

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
répondu Avia Barsik 2017-08-14 01:43:20

utilisation:

use Yii;

...

Yii::$app->formatter->nullDisplay = 'N\A';
0
répondu Mohsen Noori 2018-09-21 08:33:16

Je ne recommanderais pas la méthode de jeu nullDisplay. Il est préférable de vérifier si la variable à laquelle vous accédez est nulle ou non.

je voudrais faire

//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;
        },
    ],
    ...
],
 ]); ?>
-2
répondu Michael Nguyen 2015-08-04 19:56:32