防止在Yii2 GridView

时间:2015-11-10 07:46:30

标签: gridview yii2

这是列显示:

'columns' => [ 
    [ 
        'label' => 'Attribute Value-Pair',
        'value' => function ($model) {                                
            return $model['attribute_group_name'] . ':' . $model['attribute_name'];                
        },
    ],
],

输出结果为:

  

尺寸:黄色

     

长度:30

但我希望输出为:Size: Yellow, Length: 30单行。

2 个答案:

答案 0 :(得分:0)

它的布局问题。您可以使用white-space: nowrap CSS规则来防止单独行中的单词:

'format' => 'raw',
'value' => function ($model) {   
    $content = "$model->attribute_group_name $model->attribute_name";                             
    return Html::tag('span', $content, ['class' => 'no-br']) ;
},

并添加到CSS:

span.nobr { white-space: nowrap; }

例如,请参阅this question

或者,如果可以接受,您可以增加此列的最小宽度:

'value' => function ($model) {   
    return "$model->attribute_group_name $model->attribute_name";                             
},
'options' => ['class' => 'class-name-for-this-specific-column'],

在CSS中:

.class-name-for-this-specific-column { min-width: 150px; }

答案 1 :(得分:0)

如果数据位于相同的父元素(例如表格单元格)中,

@arogachev's answer将起作用。但是,看起来您的内容属于不同的模型"因此,gridview会在自己的行中打印每个元素,因此同一个表的不同行。

这需要一个自定义解决方案来循环遍历模型数组并单独提取每个属性 - 值对,例如

$attribute_values = [];
foreach ($models as $model) {
    $attribute_values[] = $model['attribute_group_name'] . ': ' . $model['attribute_name'];
}
echo implode(", ", $attribute_values);

如果你这样做,你不再需要gridview。