First we need to create the required action in our controller, we will call it simply ‘status’. To begin we add it in our controller rules ‘actions’ array:
array('allow' 'actions'=>array('view', 'update', 'delete', 'status')), 'users'=>array('admin'),),Next we need to create an action for setting our record status:
|
Now we are ready to create our custom button. If you look at a standard Yii generated cGridview, toward the bottom you will see the following:
array( 'class'=>'CButtonColumn',), |
This we need to extend to include both our standard buttons plus our new custom button, making use of ‘ajax’ in the ‘options’ array:
array( 'class'=>'CButtonColumn', 'template' => '{view}{update}{status}{delete} //include the standard buttons plus the new status button 'buttons'=>array ( 'status' => array ( 'label'=>'status', 'imageUrl'=>'images/icn/status.png', // make sure you have an image 'url'=>'Yii::app()->createUrl("mycontroller/status", array("id"=>$data->id))', 'options' => array(
'confirm'=>'Are you want to change status?','ajax' => array('type' => 'get', 'url'=>'js:$(this).attr("href")', 'success' => 'js:function(data) { $.fn.yiiGridView.update("my-grid")}') ), ),), |
Important things to note above:
- You need an image for your new button, I have used ‘images/icn/status.png’
- For the yiiGridView update() function, make sure that you enter the correct ID for your grid
further Reference
http://www.yiiframework.com/wiki/410/create-custom-button-button-with-ajax-function-in-cgridview/
http://www.mattiressler.com/customising-cgridview-custom-cbuttoncolumn-ajax-buttons/
http://www.yiiframework.com/wiki/106/using-cbuttoncolumn-to-customize-buttons-in-cgridview/

Great article. +1
ReplyDeleteThanks, really helpful information.
ReplyDeleteHow can I update js content
ReplyDelete'ajax' => array(
'type' => 'get',
'url'=>'js:$(this).attr("href")',
'success' => 'js:function(data) {
// Updatable content
// Must be of toogle
//toastr.success("Success");
//toastr.error("Error");
// End of updatable content
$.fn.yiiGridView.update("my-grid")
}'
)