2012-07-30 8 views
1

Yii EMarkitupWidget에서 이미지를로드하려고합니다. 따라서 multipart/form-dataform의 모달 창을 열고 이미지를 업로드하고 이미지 URL이있는 컨트롤러에서 콜백을 받으려고합니다. 그런 다음 업로드 된 이미지 URL을 마 이릿 업 창에 붙여 넣어야합니다.Yii Markitup 위젯의 이미지로드

어떻게하면됩니까? 나는 이것을 시도하고있다 :

<?php $this->beginWidget('zii.widgets.jui.CJuiDialog', array(
    'id'=>'mymodal', 
    'options'=>array(
     'title'=>'Image Upload', 
     'width'=>400, 
     'height'=>200, 
     'autoOpen'=>false, 
     'resizable'=>false, 
     'modal'=>true, 
     'closeOnEscape' => true, 
    ), 
)); ?> 
<?php $model=new ImageForm(); 
    $this->renderPartial('application.views.site.image',array('model'=>$model)); 
?> 
<?php $this->endWidget('zii.widgets.jui.CJuiDialog'); ?> 

양식 :

class ImageForm extends CFormModel { 
public $image; 
// другие свойства 

public function rules(){ 
    return array(
     // устанавливаем правила для файла, позволяющие загружать 
     // только картинки! 
     array('image', 'file', 'types'=>'jpg, gif, png'), 
    ); 
} 
} 

폼보기 양식

function markitupimageupload(){ 
    $('#mymodal').dialog('open'); 
} 

모달 창

set.js: {name:'Picture', key:'P', call: 'markitupimageupload'}, 

이 기능은 모달 창을 엽니 다 :

<div class="form"> 
    <?php $form=$this->beginWidget('CActiveForm', array(
    'id'=>'image-upload-form', 
    'action'=>array('/image/uploadnew'), 
    'enableClientValidation'=>true, 
    'clientOptions'=>array(
     'validateOnSubmit'=>true, 
    ), 
    'htmlOptions'=>array('enctype'=>'multipart/form-data'), 
)); ?> 

    <?php echo CHtml::errorSummary($model); ?> 

    <div class="row"> 
     <?php echo $form->labelEx($model,'image'); ?> 
     <?php echo CHtml::activeFileField($model,'image'); ?> 
     <?php echo CHtml::error($model,'image'); ?> 
    </div> 

    <div class="row buttons"> 
     <?php echo CHtml::ajaxSubmitButton('Upload','/websnippets/image/uploadnew', 
     array('type' => 'POST', 
      'success' => 'function(){ $("#mymodal").dialog("close");}',)); 
     //echo CHtml::submitButton('Upload'); 
     ?> 
    </div> 

    <?php $this->endWidget(); ?> 
</div><!-- form --> 

문제점 : 그런 다음 CHtml :: submitButton ('업로드')을 사용하여 파일이 업로드되고 있습니다. 하지만 파일 이름 URL을 가져와야합니다. 그렇다면 CHtml :: ajaxSubmitButton을 사용하여 Json 응답을받을 수 있지만 파일이로드되지 않습니다. 어떻게 해결할 수 있을까요?

답변

0

반환하여 actionUploadnew 컨트롤러의 파일 이름 - 예를 들면 :

콜백 자바 스크립트에서
echo CJSON::encode(array('filepath'=>$filepath)); 

, 당신은 그것을 좋아 액세스 할 수 있습니다 :

'success' => 'function(data){ console.log(data.filepath); }' 
0

제출 할 수있게하는 jQuery form plugin있다 당신이 파일을 가지고 있어도 AJAX를 통해 양식을 만들 수 있습니다. 그것은 매우 사용하기 쉽고 매우 강력합니다. 파일 이름이있는 JSON 인코딩 객체를 반환하는 작업에 양식을 제출 한 다음 작업하십시오.