0

Q : cjuidialog ウィジェットでファイルをアップロードするには?

説明 : ポップアップ ボックスを使用して単一のファイルをアップロードしたい。そこで、cjuidialog ボックス ウィジェットを選択します。と、ここから従った。しかし、私は保存と検証に直面しています。送信後、データが保存されず、検証に失敗すると、ポップアップ ボックスが何度も再表示されます (複製されます)。

これは views/aa/_form.php です

<?php
    echo CHtml::ajaxLink(Yii::t('attachment','Attachment'),$this->createUrl('attachmentform'),array(
        'onclick'=>'$("#attachDialog").dialog("open"); return false;',
        'update'=>'#attachDialog'
        ),array('id'=>'showattachDialog', 'class'=>'btn btn-info'));
    ?>

これは controller/aacontroller.php です

public function actionAttachmentForm()
    {
        $media=new Media;
        $this->performAjaxValidation($media);
        $flag=true;
        if(isset($_POST['Media']))
        {       
            $flag=false;
            $media->attributes=$_POST['Media'];


            $media->name=CUploadedFile::getInstance($media,'name');

            var_dump($media->attributes);

            if($media->save()) {
                //do something here and renderPartial to uploadedfile.php to show uploaded files.
                $this->renderPartial('uploadedFile','',false,true);
            }
        }

        if($flag == true) {
            Yii::app()->clientScript->scriptMap['jquery.js'] = false;

        }
        $this->renderPartial('uploadform',array('model'=>$media,),false,true);

    }

これは views/aa/uploadform.php です

$this->beginWidget('zii.widgets.jui.CJuiDialog',array(
                'id'=>'attachDialog',
                'options'=>array(
                    'title'=>Yii::t('attachment','Attachment Form'),
                    'autoOpen'=>true,
                    'modal'=>'true',
                    'width'=>'450',
                    'height'=>'300',
                    'draggable' => false,
                    'resizable'=> false,
                ),
                ));
echo $this->renderPartial('_formupload', array('model'=>$model)); ?>
<?php $this->endWidget('zii.widgets.jui.CJuiDialog');

これは views/aa/_formupload.php です

<div class="form" id="attachDialogForm">

<?php $form=$this->beginWidget('CActiveForm', array(
    'id'=>'attach-form',
    'enableAjaxValidation'=>true,
    'htmlOptions' => array('enctype' => 'multipart/form-data'),
)); 
//I have enableAjaxValidation set to true so i can validate on the fly the
?>

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

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


    <div class="row">
        <?php echo $form->labelEx($model,'name'); ?>
        <?php echo $form->fileField($model,'name'); ?>
        <?php echo $form->error($model,'name'); ?>
    </div>

    <div class="row">
        <?php echo $form->labelEx($model,'description'); ?>
        <?php echo $form->textField($model,'description'); ?>
        <?php echo $form->error($model,'description'); ?>
    </div>


    <div class="row buttons">
        <?php 
        echo CHtml::ajaxSubmitButton(Yii::t('attachment','Upload'),
            CHtml::normalizeUrl(array('attachmentform','render'=>false)),array(
            //'beforeSend' => 'function(){$("#uploadedfile").addClass("loading");}',
            //'complete' => 'function(){$("#uploadedfile").removeClass("loading"); $("#attachDialog").dialog("close");}',
            'success'=>'js: function(data) {
                //alert(data);
            $("#attachDialog").dialog("close");
            $("#uploadedfile").html(data);
        }'),array('id'=>'closeattachDialog')); 
        ?>
    </div>

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

</div>
4

1 に答える 1

0

「EAjaxUpload」拡張機能をお勧めします。使い方はとても簡単で、私が実装したので、質問があればお手伝いできます。

于 2013-07-03T11:24:46.647 に答える