我們知道GridView組件非常方便,會自動生成數據表格。table tr td神馬的全自動生成的。但是如果想定制化稍微有點難度。
比如想在某列td上應用樣式。
老寫法是這樣的
<?= GridView::widget([ 'dataProvider' => $dataProvider, 'layout' => "{items}\n{pager}\n{summary}", 'summary' => '<p class="summary">當前顯示第{begin} - {end}條,共{totalCount}條。</p>', 'columns' => [ ['class' => 'yii\grid\SerialColumn'], 'name', [ // 看這里 'attribute' => 'propertyValuesString', 'format' => 'html', 'value' => function ($model, $key, $index, $column){ return '<div class="limit-width">'. $model->propertyValuesString .'</div>'; } ], ......
這樣返回的html,td標簽里面會套一層<div class="limit-width"></div>。
如果才能將class應用在td上呢
查了源碼之后,可以這樣:
<?= GridView::widget([ ....... 'columns' => [ ['class' => 'yii\grid\SerialColumn'], 'name', // 新增的代碼 [ 'class' => 'yii\grid\Column', 'contentOptions' => [ 'class' => 'limit-width', ], // 或者 'contentOptions' => ['style' => 'white-space: pre;'], 'header' => '類目下的所有種類', 'content' => function ($model, $key, $index, $column){ return $model->propertyValuesString; } ],
也就是說。該列我需要用到 yii/grid/Column類。該類有個contentOptions屬性。接收匿名函數或數組。數組就是屬性名和屬性值得鍵值對。渲染時該列包含一個th和多個td。th內容從header中取,td就是content。