GridView ve ListView'ımdaki dizeleri (not set)
nasıl silebilirim veya değiştirebilirim? Ben (şimdi) biliyorumYii2: "(ayarlanmamış)" öğesini GridView ve null değerleri için DetailView öğesinden kaldırın
cevap
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.
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;
},
],
...
],
]); ?>
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 : '-';
}
Bu doğru değil. Dokümantasyon olarak, emptyCell hiçbir şey iade edilmediğinde göstermektir. – Prescol
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;
Her öğeyi null olarak denetlemek, biçimlendiriciyi null değerine ayarlamaktan daha iyidir. Açıkla –