您的位置:首页 > 编程语言 > PHP开发

Yii CGridView CButtonColumn, ajax 自定义按钮之三

2014-06-27 10:24 537 查看
http://www.yiiframework.com/wiki/410/create-custom-button-button-with-ajax-function-in-cgridview/

Introduction

CButtonColumn in CGridView can be customised to include user built buttons. To learn a great deal about including custom buttons, read this excellent wiki. This tutorial will show how to call an action from one custom button using AJAX instead of regular GET calls.

How to
1.Create a custom button in your grid. You can follow this tutorial for that.
2.In the ‘url’ parameter of your button, you call your controller action:

'url'=>'Yii::app()->controller->createUrl("myAction",array("id"=>$data->primaryKey))' •In the ‘click’ function of your button you add the following code:

'click'=>"function(){
$.fn.yiiGridView.update('my-grid', {  //change my-grid to your grid's name
type:'POST',
url:$(this).attr('href'),
success:function(data) {
$.fn.yiiGridView.update('my-grid'); //change my-grid to your grid's name
}
})
return false;
}
",
This will call the controller function using AJAX instead of redirecting the user to the url using GET parameters.

Example

We will create a button that sends email to the user and then prints a success flash screen.

In your controller:

public function actionEmail($id)
{
$model = $this->loadModel($id);
$email = $model->email; //this is the user email
if (mail($email, 'My Subject', 'my message'))
echo 'email sent to '.$email;
// if AJAX request, we should not redirect the browser
if(!isset($_GET['ajax']))
$this->redirect(Yii::app()->request->urlReferrer);
}
In your view file, in a CButtonColumn of the grid:

array
(
'class'=>'CButtonColumn',
'template'=>'{email}{view}{update}{delete}',
'buttons'=>array
(
'email' => array
(
'label'=>'Send an e-mail to this user',
'imageUrl'=>Yii::app()->request->baseUrl.'/images/email.png',
'click'=>"function(){
$.fn.yiiGridView.update('user-grid', {
type:'POST',
url:$(this).attr('href'),
success:function(data) {
$('#AjFlash').html(data).fadeIn().animate({opacity: 1.0}, 3000).fadeOut('slow');

$.fn.yiiGridView.update('user-grid');
}
})
return false;
}
",
'url'=>'Yii::app()->controller->createUrl("email",array("id"=>$data->primaryKey))',
),
)
In your view file you also need to include the div for the flash message:

<div id='AjFlash' class="flash-success" style="display:none"></div>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: