2015-05-28 22 views

cevap

43

iki yolu:

Biçimlendirici boş dışında bir

Seti nullDisplay of Formatter. Bunu global konfigürasyonda veya tek GridView veya DetailView için yapabilirsiniz.

Genel (tipik içinde config/web.php veya <application>/config/main.php dosya):

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

belli GridView içinde (DetailView ile aynı): Set

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

değeri

Muhtemelen çok zarif değil . Belli bir GridView:

<?= 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) : '', 
     ], 
     ... 
    ], 
]) ?> 

İki ipuçları çeşitli yaklaşımlar aynı anda kullanılırsa

: değeri (doğrudan veya tarafından ayarını

<?= 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 ''; 
       } 
      }, 
     ], 
     ... 
    ], 
]); ?> 

Veya belli bir DetailView içinde

işlevi), Izgara/Ayrıntı Görünümünün biçimlendirici yapılandırmasını geçersiz kılar ve bu da genel bir biçimlendirici yapılandırmasını geçersiz kılar.

Ayrıca boş bir dizeden farklı bir şey tanımlayabilirsiniz. Örneğin. bootstrap kullanılırsa, eksik değerler için bir sembol almak için '<span class="glyphicon glyphicon-question-sign"></span>''u kullanmak isteyebilirsiniz.

-2

nullDisplay yöntemini ayarlamanızı tavsiye etmem. Eriştiğiniz değişkenin boş olup olmadığını kontrol etmek en iyi yöntemdir.

yapardım

//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; 
     }, 
    ], 
    ... 
], 
]); ?> 
+1

Her öğeyi null olarak denetlemek, biçimlendiriciyi null değerine ayarlamaktan daha iyidir. Açıkla –

1

seti emptycell içinde gridveiw yapılandırma:

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

veya:

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

Bu doğru değil. Dokümantasyon olarak, emptyCell hiçbir şey iade edilmediğinde göstermektir. – Prescol

0

kartik\grid\GridView için;

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