duangai2831 2014-01-31 10:05
浏览 76
已采纳

使用ajax调用在局部视图内渲染Yii的Flash消息

I have a problem displaying Flash messages in Yii. Inside my view I have an ajax button, calling method update of my controller. Inside the update method I want to set a Flash message and display it inside my view when it's updated with new data.

   *update.php :*

    <?php
    <h1>Update Campaign <?php echo $campaign->id; ?></h1>
    <?php
    $tabList = array();
//FORM IS DISPLAYED INSIDE A JUI TAB:
    $tabList['General'] = $this->renderPartial('_form', array('campaign'=>$campaign),true);*

    ...

    $this->widget('zii.widgets.jui.CJuiTabs',array(
        'tabs'=>$tabList,
        'options'=>array(
            'collapsible'=>false,
        ),
    ));
    ?>


*_form.php:*

//HERE I WANT TO DISPLAY A FLASH MESSAGE WHEN _form IS RENDERED:
    <?php foreach(Yii::app()->user->getFlashes() as $key => $message) : ?>
        <div class="flash-<?php echo $key; ?>"><?php echo $message; ?></div>
    <?php endforeach; ?>

    <?php
        Yii::app()->clientScript->registerScript(
            'myHideEffect',
            '$(".flash-success").animate({opacity: 1.0}, 1000).fadeOut("slow");',
            CClientScript::POS_READY
        );
    ?>
    <div class="form">
    <?php $form=$this->beginWidget('CActiveForm', array(
        'id'=>'campaign-form',
        'enableAjaxValidation'=>false,
    )); ?>

        <p class="note">Fields with <span class="required">*</span> are required.</p>

        <?php echo $form->errorSummary($campaign); ?>

        <div class="row">
            <div class="span2">
                    <?php echo $form->labelEx($campaign,'campaign_mode_id'); ?>
            </div>
            <div class="span2">
                <?php echo $form->dropDownList($campaign,'campaign_mode_id', CampaignMode::model()->getModes());?>
                <?php echo $form->error($campaign,'campaign_mode_id'); ?>
            </div>
        </div>
    ...
        <div class="row buttons">
            <div class="span2">
                <?php
                    if($campaign->isNewRecord){
                        echo CHtml::submitButton( 'Create');
                    }else{
//THIS IS MY AJAX-SUBMIT BUTTON, IT CALL CONTROLLER'S UPDATE METHOD AND UPDATE JUI TAB (DIV WITH ID '#yw0_tab0')
                        echo CHtml::ajaxSubmitButton(
                            'Save',
                            Yii::app()->createUrl("//campaign/update/{$campaign->id}"),
                            array('beforeSend' => 'function(){
                                          $("#surveyquestions").addClass("ajaxloading");}',
                                'complete' => 'function(){
                                          $("#surveyquestions").removeClass("ajaxloading");}','update' => "#yw0_tab0"),
                            array('id' => 'send-link-'.uniqid()));
                    }
                ?>
            </div>
        </div>

    <?php $this->endWidget(); ?>


*Contorller:*


    public function actionUpdate($id)
        {
            $campaign=$this->loadModel($id);
            if(isset($_POST['Campaign']))
            {
                $campaign->attributes=$_POST['Campaign'];
                if($campaign->save())
                {
//HERE I'M SETTING THE FLASH MSG
                    Yii::app()->user->setFlash('success','Campaign is updated');

                    if(Yii::app()->request->isAjaxRequest){
//AND UPDATING MY VIEW
                        $this->renderPartial('_form', array('campaign'=>$campaign), true,true);
                    }else{
                        $this->redirect(array('update','id'=>$campaign->id));
                    }
                }
            }
            $this->render('update',array('campaign'=>$campaign));
        }
  • 写回答

1条回答 默认 最新

  • duanlvxi8652 2014-01-31 11:25
    关注

    Actually you are rendering _form view, but without sending it to output (take a look at third param), and then you are rendering update view... The flash message has been rendered once in _form, so it won't be rendered again.

    You should simply try this :

    if(Yii::app()->request->isAjaxRequest) {
        $this->renderPartial('_form', array('campaign'=>$campaign), false, true);
        Yii::app()->end();
    } else {
        $this->redirect(array('update','id'=>$campaign->id));
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器