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

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>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值