1

我想删除图像并在更新视图(yii)中重新显示上传的字段。

  1. 有一张图片已上传。
  2. 当用户删除此图像时。
  3. 那时图像将被删除,上传$form->filefield将出现在图像位置。

这是视图

<div id="forAjaxRefresh"><img src="<?php echo $file; ?>" width="150px" /></div>

<?php echo CHtml::ajaxLink('clickMe', array('ajax'), array('update'=>'#forAjaxRefresh'));?>

这是控制器

public function actionAjax()
    {
        $model=new CompanyLicense('search');
        //$this->render('update', array('model'=>$model,'test'=>'test'), false, true);
        //echo "$form->labelEx($model,'file_path');
        //$form->fileField($model,'file_path', array('class'=>'input-file')); 
        //$form->error($model,'file_path'); ";
        //echo "$form->labelEx($model,'file_path')";

        echo 'OK';
    }

当我尝试喜欢它时。它在 处显示“OK”。但我想在 . 我该怎么办?请帮我。

===============+++++++++++++++++++++++++++++++++==== =================================

最新的mvc

模型没什么变化

控制器

public function actionAjax($id)
    {
        $model=new CompanyLicense();
        //$this->render('uploadfield', array());
        //echo "$form->labelEx($model,'file_path');
        //$form->fileField($model,'file_path', array('class'=>'input-file')); 
        //$form->error($model,'file_path'); ";
        //echo "$form->labelEx($model,'file_path')";


        echo $this->renderPartial('uploadfield',array('model'=>$model),false,true);

        /*
        $model=Company::model()->findByPk($_GET['id']);

        if($model){
            $file = '/images/'. $model->id . '/'. $model->file_path;
            unlink(dirname(__FILE__) . '/../../..'.$file);
        }
        <br />
*/


    }

查看(_form.php)

<div class="form">

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

    <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,'company_id'); ?>
        <?php
            $records = Company::model()->findAll();
            $list = CHtml::listData($records, 'id', 'name');            
        ?>     
        <?php echo $form->dropDownList($model,'company_id', $list, array('prompt'=>'Please select a Company')); ?>

        <?php echo $form->error($model,'company_id'); ?>
    </div>
    <div class="row">
        <?php echo $form->labelEx($model,'license_no'); ?>
        <?php echo $form->textField($model,'license_no',array('size'=>50,'maxlength'=>50)); ?>
        <?php echo $form->error($model,'license_no'); ?>
    </div>

    <div class="row">
        <?php echo $form->labelEx($model,'license_name'); ?>
        <?php echo $form->textField($model,'license_name',array('size'=>60,'maxlength'=>200)); ?>
        <?php echo $form->error($model,'license_name'); ?>
    </div>

    <div class="row">
        <?php echo $form->labelEx($model,'annualfee'); ?>
        <?php echo $form->textField($model,'annualfee',array('size'=>10,'maxlength'=>10)); ?>
        <?php echo $form->error($model,'annualfee'); ?>
    </div>

    <div class="row">

        <?php echo $form->labelEx($model,'expire_date'); ?>
        <?php 
            $this->widget('zii.widgets.jui.CJuiDatePicker', array(
                'name'=>'expire_date',      
                'model'=>$model,
                'value' => $model->expire_date, 
                'options'=>array(
                    'showAnim'=>'fold',
                    'dateFormat' => 'yy-mm-dd',

                ),
                'htmlOptions'=>array(
                    'style'=>'height:20px;'
                ),
            ));
            ?>
        <p> Expire Date must be greater than Current Date.</p>
        <?php echo $form->error($model,'expire_date'); ?>
    </div>

    <div class="row">
        <?php echo $form->labelEx($model,'notification_days'); ?>
        <?php echo $form->textField($model,'notification_days'); ?><p> Notification Days must be between 7 and 90.</p>
        <?php echo $form->error($model,'notification_days'); ?>
    </div>

    <div class="row">
        <?php echo $form->labelEx($model,'description'); ?>
        <?php echo $form->textArea($model,'description',array('rows'=>6, 'cols'=>50)); ?>
        <?php echo $form->error($model,'description'); ?>
    </div>


    <div class="row" id="file_upload">
    <?php
        $file = '/images/'. $model->id . '/'. $model->file_path;

        if (file_exists(dirname(__FILE__) . '/../../..'.$file)){
            echo '<img src="http://' . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']) . $file.'" width="150px" />' ;

        }else{
        ?>
            <div class="row">
            <?php echo $form->labelEx($model,'file_path'); ?>
            <?php echo $form->fileField($model,'file_path', array('class'=>'input-file')); ?>
            <?php echo $form->error($model,'file_path'); ?>
            </div>
        <?php
        }
    ?>
    </div>      

    <div id="forAjaxRefresh"><img src="http://<?php echo $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']) . $file; ?>" width="150px" /></div>
    <div class="row buttons">
        <?php echo CHtml::submitButton($model->isNewRecord ? 'Create' : 'Save'); ?>
    </div>

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

</div><!-- form -->


<?php echo CHtml::ajaxLink('remove', array('ajax'), array('update'=>'#forAjaxRefresh')); ?>


<?php
echo CHtml::ajaxLink( 'delete',  array( 'companylicense/ajax',  'id'=>$model->id), array('type'=> 'GET', 'update' => '#forAjaxRefresh') );
?>

<?php echo CHtml::ajaxLink('remove2', array('url'=>array('companylicense/ajax', 'id'=>$model->id),
), array('update'=>'#forAjaxRefresh')); ?>

查看 (uploadfield.php)

<?php $form=$this->beginWidget('CActiveForm', array(
        'id'=>'company-license-form',
        'enableAjaxValidation'=>false,
        'htmlOptions' => array('enctype' => 'multipart/form-data'),
    )); ?>
<?php echo $form->labelEx($model,'file_path'); ?>
<?php echo $form->fileField($model,'file_path', array('class'=>'input-file')); ?>
<?php echo $form->error($model,'file_path'); ?>
<?php $this->endWidget(); ?>

请帮我!!!

4

2 回答 2

1

尽管用勺子喂人是不健康的态度,但你似乎遇到了很多麻烦。看到它非常非常简单,您采用了复杂的方法。

按照这些步骤,你很高兴。

View

 <?php echo $form->labelEx($model,'full_version'); ?>                
 <?php if($model->full_version == '')
           echo $form->filefield($model,'full_version',array('style'=>'width:100%;')); 
       else
       {
           echo '<div id="file"><b>'.$model->full_version.'</b> '.CHtml::AjaxLink('Delete',CController::createUrl('removeFinalVersion',array('id'=>$model->id)),array('update'=>'#file')).'</div>';
       }?>
<?php echo $form->error($model,'full_version'); ?>

现在我们要做的就是用file Div文件上传的想法替换 。如果您必须上传比文件字段更多的字段,那么您可以使用单独的文件并将其呈现在控制器和回显中。但对于这个演示,我正在考虑只返回一件物品。

因此,当提出 Ajax 请求时,事情归结为actionRemoveFinalVersion需要完成所有谈话并且必须返回文件字段

它看起来像这样

public function actionRemoveFinalVersion($id)
    {
            $user = Products::model()->findByPk($id);
            if($user === null)
                yii::app()->end();
            $user->full_version = '';
            $user->save();
            //return CHtml::activeFileField($model,'full_version',array('style'=>'width:100%;'));
            echo CHtml::Tag('input',
                    array(
                        'style'=>"width:100%;",
                        'name'=>"Products[full_version]" ,
                        'id'=>"Products_full_version",
                        'type'=>"file"));
    }

专注于nameid归来filefield。它需要精确,这样validation才能发生。I am using this and it works. 如果你做正确的事情,你也应该这样做。

此外,在玩 AJAX 时,请在 firefox 中使用 Firebug 工具,在 Chrome 中使用类似工具

于 2012-07-20T11:54:07.463 回答
0

我可以解决它。:D :D

模型没什么变化

查看 (_form.php)

<div class="row" id="file_upload">
    <?php
        if ($model->id){
            $file = '/images/'. $model->id . '/'. $model->file_path;
            echo '<div id="forAjaxRefresh">';
            echo '<img src="http://' . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']) . $file.'" width="150px" />' ;
            echo CHtml::ajaxLink('remove', array('delimg', 'id'=>$model->id), array('update'=>'#forAjaxRefresh'));
            echo '</div>';

        }else{
        ?>
            <div class="row">
            <?php echo $form->labelEx($model,'file_path'); ?>
            <?php echo $form->fileField($model,'file_path', array('class'=>'input-file')); ?>
            <?php echo $form->error($model,'file_path'); ?>
            </div>
        <?php
        }
    ?>
    </div>

查看 (uploadfield.php)

<?php echo CHtml::label('File', 'Application_word_report'); ?> 
<?php echo CHtml::fileField('CompanyLicense[file_path]', ''); ?> 

控制器

public function actionDelimg()
{
    $model=CompanyLicense::model()->findByPk($_GET['id']);

    $file = '/images/'. $model->id . '/'. $model->file_path;
    if(file_exists(dirname(__FILE__) . '/../..'.$file))
        unlink(dirname(__FILE__) . '/../..'.$file);

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

public function actionUpdate($id)
    {
        $model=$this->loadModel($id);
        if(isset($_POST['CompanyLicense']))
        {
            $model->attributes=$_POST['CompanyLicense'];
            $currentTime = date('Y-m-d h:i:s', time());                             
            $model->updated = $currentTime; 
            $model->active = 1; 

            $model->file_path=CUploadedFile::getInstance($model,'file_path');

            $folder = Yii::getPathOfAlias('webroot').'/images/';
                        if($model->save())
                        {
                $model->file_path->saveAs($folder. $model->id . "/" . $model->file_path);
                // redirect to success page

                $this->redirect(array('view','id'=>$model->id));
                        }  
        }

        $this->render('update',array(
            'model'=>$model,
        ));
    }
于 2012-07-24T05:13:52.037 回答