0

ポップアップフォームの ajaxlink で CJuiDialog ウィジェットを使用しています..うまくいきます..

しかし、今、そのポップアップフォームから複数のファイルをアップロードする必要があります..アップロードオプションにCMultiFileUploadを使用しますが、通常の単一ファイルボタンのように機能します..これを解決するのを手伝ってください..これが私のコードです:

 <?php echo CHtml::ajaxLink(Yii::t('image','Upload'),array('gallery/create'),array(
    'success'=>'js:function(data){
    $("#gallery-form").dialog("open");
    document.getElementById("add_images").innerHTML=data;}'));
$this->beginWidget('zii.widgets.jui.CJuiDialog',array(
            'id'=>'gallery-form',
            'options'=>array(
                'title'=>Yii::t('image','Upload'),
                'autoOpen'=>false,
                'model'=>'true',
                'width'=>'auto',
                'height'=>'auto',
            ),
            ));
echo "<div id='add_images'></div>";
$this->endWidget('zii.widgets.jui.CJuiDialog');  ?>

これは私のコントローラーアクションです:

            if(isset($_FILES['image']))
    {
        $model->attributes=$_POST['Photo'];
        $images = CUploadedFile::getInstancesByName('image');
        if(isset($images) && count($images)> 0) 
        {
            foreach ($images as $image=>$pic) 
            {
                               if (!is_dir(Yii::getPathOfAlias('webroot').'/gallery/'.$user->username===true) ){
                                   mkdir(Yii::getPathOfAlias('webroot').'/gallery/'.$user->username, 0777);
            }


                            if ($pic->saveAs(Yii::getPathOfAlias('webroot').'/gallery/'.$user->username.'/'.$pic->name))    
                {   
                    $model->setIsNewRecord(true);
                    $model->id = null;
                                $model->image = $pic->name;
                                            $model->setAttribute('user_id',$id);
                                $model->save();
                }               
            }
                    $this->redirect(array('admin','id'=>$model->id));
        }
    }
 Ajax Popup Request
                if( Yii::app()->request->isAjaxRequest )
                             {
                    Yii::app()->clientScript->scriptMap['jquery.js'] = false;
                    $this->renderPartial('create',array(
                                        'model'=>$model,
                                ));}else{}

これはレンダリングされた部分ビュー ファイルで、cjuidialog を使用せずにマルチアップロード ファイルで正常に動作しますが、cjuidialog を使用して呼び出すと、単一ファイルのアップロードのみがサポートされます。助けてください。

<?php $form=$this->beginWidget('CActiveForm', array(
'id'=>'gallery-form',
'enableAjaxValidation'=>true,
 'htmlOptions' => array(
        'enctype' => 'multipart/form-data',),
)); ?>

<?php echo $form->errorSummary($model); ?>
<div class="row">
    <?php echo $form->labelEx($model,'image'); ?>
     <?php
      $this->widget('CMultiFileUpload', array(
         'model'=>$model,
         'name'=>'image',
         'attribute'=>'image',
         'accept'=>'jpg|gif|png',

      ));
    ?>

    <?php echo $form->error($model,'image'); ?>
</div>

<div class="row buttons">
    <?php echo CHtml::submitButton($model->isNewRecord ? 'Upload' : 'Save'); ?>
</div>

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

1 に答える 1

1

renderPartial はデフォルトではスクリプトをロードせず、CMultiFileUpload ウィジェットはスクリプトを使用するため、renderPartial がスクリプトをロードするようにする必要があります。これを行うには、renderPartial を変更して 2 つの追加パラメーターを含めます。

$this->renderPartial('viewName', 
    array('variable' => $variable), false, true
); 

false, true最後に が追加されていることに注意してください。false は「ビューを返さずに表示する」ことを意味し、true はスクリプトを追加する「後処理」を意味します。

詳細情報: http://www.yiiframework.com/doc/api/1.1/CController#renderPartial-detail

[編集]

ダイアログをロードする別の方法を次に示します。renderPartial で「false、true」が必要です。

Yii::app()->clientScript->registerScript('uploadDialog', "
$(function(){
    $('#upload-image').click(function(){
        $('#gallery-form').load('".Yii::app()->createUrl('gallery/create')."', function(){
            $('#gallery-form').dialog('open');
        });
        return false;
    });
});");

echo CHtml::link('Upload', '#', array('id' => 'upload-image'));

$this->beginWidget('zii.widgets.jui.CJuiDialog',array(
    'id'=>'gallery-form',
    'options'=>array(
        'title'=>Yii::t('image','Upload'),
        'autoOpen'=>false,
        'model'=>'true',
        'width'=>'auto',
        'height'=>'auto',
    ),
));

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

次に、コントローラーから以下の行を削除します。

Yii::app()->clientScript->scriptMap['jquery.js'] = false;

それでもうまくいかない場合は、ajax を介してコンテンツをロードする代わりに、renderPartial を CJuiDialog ウィジェット タグの間に直接追加することをお勧めします。

于 2013-03-02T20:25:36.120 に答える