我正在使用带有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{}
这是我渲染的部分视图文件,可以正常使用multiupload文件而无需使用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(); ?>
答案 0 :(得分:1)
renderPartial默认情况下不加载脚本,而CMultiFileUpload小部件使用脚本,因此您需要创建renderPartial加载脚本。您可以通过更改renderPartial以包含两个额外参数来实现:
$this->renderPartial('viewName',
array('variable' => $variable), false, true
);
注意false, true
添加到最后? false表示“不返回视图,显示它”,真实的意思是“后处理”,这将添加脚本。
了解更多信息: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;
如果仍然无效,我建议您直接在CJuiDialog小部件标记之间添加renderPartial,而不是通过ajax加载内容。