YiiのGridViewのカラムの内容に手を加えて表示したい

Yiiでは、検索結果などを一覧で表示するのにGridViewというのを使います。

<?php $this->widget('bootstrap.widgets.TbGridView',array(
  'id'=>'card-grid',
  'dataProvider'=>$model->search(),
  'filter'=>$model,
  'columns'=>array(
    'id',
    'name',
    'imgdata',
    array(
      'class'=>'bootstrap.widgets.TbButtonColumn',
    ),
  ),
)); ?>

例えば、imgdataというカラムについて、データをそのまま表示するのではなく、同モデルのrenderPreviewという関数で処理した内容を表示したい場合は以下のようにします。(同モデルではなく、同コントローラの関数なら$modelのかわりに$thisを使う)

<?php $this->widget('bootstrap.widgets.TbGridView',array(
  'id'=>'card-grid',
  'dataProvider'=>$model->search(),
  'filter'=>$model,
  'columns'=>array(
    'id',
    'name',
    array(
      'name'=>'imgdata',
      'type'=>'raw',
      'value'=>array($model,'renderPreview'), 
      ),
    array(
      'class'=>'bootstrap.widgets.TbButtonColumn',
    ),
  ),
)); ?>

なお、「’type’=>’raw’」はHTMLタグをエスケープしないで表示するという指定です。
typeの他によく使うのは、filter、header、htmlOptionsでしょうか。

<?php $this->widget('bootstrap.widgets.TbGridView',array(
  'id'=>'card-grid',
  'dataProvider'=>$model->search(),
  'filter'=>$model,
  'columns'=>array(
    'id',
    'name',
    array(
      'name'=>'imgdata',
      'type'=>'raw',
      'value'=>array($model,'renderPreview'), 
      'filter'=>false,
      'header'=>'画像',
      'htmlOptions'=>array('style'=>'margin: 20px;'),
      ),
    array(
      'class'=>'bootstrap.widgets.TbButtonColumn',
    ),
  ),
)); ?>

のようにすると、

  • 「’filter’=>false」は、このカラムについてはフィルター(検索フィールド)を表示しない。
  • 「’header’=>’画像’」は、このカラムの名前を「画像」にする。
  • 「’htmlOptions’=>array(‘style’=>’margin: 20px;’)」は、このカラムだけ「margin: 20px;」のCSSを設定する。

となります。

※参考
CDataColumn

投稿日:
カテゴリー: php タグ: