web-dev-qa-db-ja.com

Yii2:null値のGridViewおよびDetailViewで「(not set)」を削除

文字列を削除または置換するにはどうすればよいですか(not set)私のGridViewとListViewで?

21
robsch

私が知っている2つの方法(現在):

フォーマッタ

FormatterのnullDisplay をnull以外に設定します。これは、グローバル構成で、または単一の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) : '',
        ],
        ...
    ],
]) ?>
_

2つのヒント

複数のアプローチを同時に使用する場合:値を設定すると(直接または関数によって)、Grid/DetailViewのフォーマッター構成がオーバーライドされ、これによりグローバルフォーマッター構成がオーバーライドされます。

空の文字列とは異なるものを定義することもできます。例えば。 bootstrap=を使用する場合、\yii\bootstrap\Html::icon('question-sign')(または_'<span class="glyphicon glyphicon-question-sign"></span>'_)を使用して、欠損値のシンボルを取得できます。

57
robsch

Gridview configでemptycellを設定します。

<?= 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 : '-';
   }
1
mohsen

にとって 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

これを使って:

use Yii;

...

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