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


How to load a view + form in a modal window in Yii

在Yii中,我有2个模型-->时间表和档案

我想要实现的:在模型中,有一个显示菲切列表的视图。每个菲切都有打开模式窗口的按钮。模态窗口的内容是创建达析报告+显示5个最新达析报告的表单。

到目前为止,我拥有的:

查看计划.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; ?>

档案控制者.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;
}

档案莫达尔.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 个达析报告。如何返回我的视图计划.php并可能打开更新内容的模式窗口?还是有另一个更容易或已经在 Yii 中的解决方案?

我希望我能帮助你,

使您重定向的代码位于

actionGetDossierById

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

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

还要检查你的newDossier()函数,我认为你在success中错过了一个"s",所以你的 ajax 没有成功,而是成功了......

问候