YiiのCGridViewのUpdateなどのデータ操作ボタンを変更する方法

YiiのCGridViewを利用した際に、データごとに表示される、view、update、deleteボタンの順番を変更したり、ボタンを削除したり、新規に追加する方法です。

giiで作成したばかりのadmin.phpにあるCGridViewは以下のような感じになっていると思います。(Yii-bootstrapを利用しているので微妙に違うと思いますが)

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

例えば、deleteボタンを削除したい場合は、

<?php $this->widget('bootstrap.widgets.TbGridView',array(
  'id'=>'contact-grid',
  'dataProvider'=>$model->search(),
  'filter'=>$model,
  'columns'=>array(
    'id',
    'title',
    'created',
    array(
      'class'=>'bootstrap.widgets.TbButtonColumn',
      'template'=>'{view} {update}',
    ),
  ),
)); ?>

のように

'template'=>'{view} {update}',

の行を追加するとよいです。

updateなどのデフォルトのボタンを押した後の処理を変更したい場合や、他の処理ボタンを追加したい場合は、

<?php $this->widget('bootstrap.widgets.TbGridView',array(
  'id'=>'contact-grid',
  'dataProvider'=>$model->search(),
  'filter'=>$model,
  'columns'=>array(
    'id',
    'title',
    'created',
    array(
      'class'=>'bootstrap.widgets.TbButtonColumn',
      'template'=>'{view} {update} {delete} {user} {suspend}',
      'buttons'=>array(
        'user' => array(
          'label'=>'ユーザ確認',
          'icon'=>'user',
          'url'=>'Yii::app()->createUrl("user/view", array("id"=>$data->id))',
        ),
        'update' => array(
          'label'=>'更新',
          'icon'=>'pencil',
          'url'=>'Yii::app()->createUrl("contact/update", array("id"=>$data->id))',
          'visible'=>'Contact::model()->updateAvailable($data->status)',
        ),
        'suspend' => array(
            'label'=>'保留',
            'icon'=>'tasks',
            'url'=>'Yii::app()->createUrl("contact/updatestatus", array("id"=>$data->id, "status"=>Contact::CONTACT_STATUS_SUSPEND))',
            'click'=>'function() {
  var th=this;
  var afterSuspend=function(){};
  $.fn.yiiGridView.update("contact-grid", {
    type:"POST",
    url:$(this).attr("href"),
    success:function(data) {
      $.fn.yiiGridView.update("contact-grid");
      afterSuspend(th,true,data);
    },
    error:function(XHR) {
      return afterSuspend(th,false,XHR);
    }
  });
  return false;}',
        ),
      ),
    ),
  ),
)); ?>

のように

'template'=>'{view} {update} {delete} {user} {suspend}',

で表示するボタンを指定し、

'buttons'=>array(

),

のところで、ボタンごとの処理内容を記述します。

なお、
labelはボタンのラベルです。
iconはYii-Bootstrapの拡張で、指定したアイコンを表示することができます。
urlはボタンが押された際の動く処理です。
clickはボタンが押された際に動くJavacriptです。
visibleは表示、非表示を切り替えるのに使います。
ボタンについての詳しい説明はこちらを御覧ください。

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