如何在Yii中的模态窗口中加载视图+表单

时间:2015-01-24 23:22:38

标签: php yii

在Yii我有2个型号 - >时间表和档案

我想要实现的目标:在模型计划中,显示一个显示fiches列表的视图。每个fiche都有 一个打开模态窗口的按钮。模态窗口的内容是一个创建档案的表格+显示5个最新的档案。

到目前为止我所拥有的:

viewSchedule.php

<?php $this->renderPartial('_fiches',array(
            'schedule'=>$model,
            'fiches'=>$fiches,
)); ?>

_fiches.php

<?php
 $this->beginWidget('zii.widgets.jui.CJuiDialog', array(
                            'id'=>"dialogFiche",
                            // additional javascript options for the dialog plugin
                            'options'=>array(
                                'title'=>'dossier',
                                'autoOpen'=>false,
                                'buttons' => array(
                                    //array('text'=>'Route','click'=> 'js:function(){'.$target.'}'),
                                    array('text'=>'Cancel','click'=> 'js:function(){$(this).dialog("close");}'),
                                ),
                                'height'=>400,
                                'width'=>650,
                                'show'=>'fade',
                                'hide'=>'fade',
                            ),
                      ));


                      $this->endWidget('zii.widgets.jui.CJuiDialog');
?>

<?php foreach($fiches as $fiche): ?>
    //fiche html ...
    <div class="editDossier">

                 <?php 

                     // the link that may open the dialog
                       echo CHtml::htmlButton("Edit dossier",
                            array(
                                'ajax'=>array(
                                    'url' => CController::createUrl('dossier/getDossierById'),   //only if you want an action here
                                    'type' => 'get',
                                    'data' =>  array(
                                        'id' => $fiche['id'],
                                        'isAjax' => 1,
                                    ),
                                    "success" => "function(data){
                                        $('#dialogFiche').html(data);
                                        $('#dialogFiche').dialog('open'); 
                                        return false;
                                    }", 
                                ),
                                'class'=>'btn btn-primary btn-medium btn2',
                            ),
                            array('id' => 'get-dossier-'.uniqid())
                        );
                 ?>


    </div>
<?php endforeach; ?>

dossierController.php

public function actionGetDossierById($id){
        $dossiersById = dossier::model()->getDossiersById($id, 5);

        $fiche = Fiche::model()->findByPk($id);
        $dossier = $this->newDossier($fiche);

        $myHtml = $this->renderPartial(
                'viewDossierInModal',
                array(
                    'dossiers'=>$dossiersById,
                    'dossier'=>$dossier,
                ),
                true
        );
        echo $myHtml;
        Yii::app()->end();                                 
        return;
    }

protected function newDossier($fiche)
{
        $dossier = new Dossier;

        if(isset($_POST['Dossier']))
        {
            $dossier->attributes = $_POST['Dossier'];
            $dossier->fiche_Id = $fiche->id;

            if($dossier->save())
            {
                echo 'succes';    
            }else{ 
                echo 'failed';
            }
        }
        return $dossier;
}

dossierModal.php

public function getDossiersById($id, $limit = null){

        $crit = new CDbCriteria();
        $crit->condition = "fiche_Id = :ficheId";
        $crit->params = array("ficheId"=>$ficheid);
        if(isset($limit)){
            $crit->limit = $limit;
        }
        $crit->order = "datum DESC";
        return $this->findAll($crit);
    }

在模态中创建档案后,页面会进行重定向,并在新的空白页面上显示表单和最新的5个档案。如何返回我的viewSchedule.php并打开更新内容的模态窗口? 或者是否有另一种,更容易或可能已经在Yii中的解决方案?

1 个答案:

答案 0 :(得分:0)

我希望我能帮到你,

使您重定向的代码位于

actionGetDossierById


$myHtml = $this->renderPartial(
        'viewDossierInModal',
        array(
            'dossiers'=>$dossiersById,
            'dossier'=>$dossier,
        ),
        true
);

如果删除或修改$myHtml,您将能够处理重定向。

同时检查您的newDossier()功能我认为您错过了&#34; s&#34;在success,所以你的ajax没有取得成功,但取得了成功......

问候