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は表示、非表示を切り替えるのに使います。
ボタンについての詳しい説明はこちらを御覧ください。