2014-09-05 73 views
0

我不知道如何描述我的問題。首先我在CCGridview添加一個按鈕:如何從以前的Yii視圖中獲取價值

array(
    'class'=>'CButtonColumn', 
    'template' => '{view}{update}{delete}{upload_image}', 
    'buttons' => array(
     'upload_image' => array(
     'label' => 'upload foto', 
     'url' => 'Yii::app()->createUrl("/image/create", 
     array("product_id" => $data->product_id))', 
     ), 
    ), 
), 

當我點擊它會帶我到/圖像/創建視圖具有PRODUCT_ID值。例如對gridview的我點擊記錄編號7,所以鏈接將是:

(web應用)/index.php/image/create?product_id=7

由於呈現的局部_form所以表單具有根據具有以下屬性的圖像表的屬性:id,title,filename,product_id。

所以認爲會是這樣的:

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

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

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

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

我的問題是,我們如何使用從我之前提到的是7(../create?product_id=7)到URL中的價值product_id屬性,而不必在提供的textField上鍵入它?

在其他的話,我會從視圖中刪除此:

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

但是,當我提交表單(7)應該已經過去了/保存在的product_id字段的值。

補充: 我控制器actionCreate是

//... 
public function actionCreate() 
{ 
      $dir = Yii::app()->basePath . '/../productimages/'; 
      $uploaded = false; 
      $model=new Image(); 

      if(isset($_POST['Image'])) 
      { 
       $model->attributes=$_POST['Image']; 
       $tempSave=CUploadedFile::getInstance($model,'filename'); 
       if($model->validate()) 
       { 
        $uploaded = $tempSave->saveAs($dir.'/'.$tempSave->getName()); 
        $this->redirect(array('/products/index')); 
       } 
      } 
      $this->render('index', array(
       'model' => $model, 
       'uploaded' => $uploaded, 
       'dir' => $dir, 
      )); 
} 

就是這樣。非常感謝..

+0

顯示我們的控制器動作,因爲這是你需要initalize變量。 – Pentium10 2014-09-05 17:11:03

+0

@ Pentium10在那裏我添加了我的控制器 – JoenMarz 2014-09-05 18:38:12

回答

1

修改您的控制器是這樣的:

if(isset($_POST['Image'])) 
{ 
     $model->attributes=$_POST['Image']; 
     $tempSave=CUploadedFile::getInstance($model,'filename'); 
     if($model->validate()) 
     { 
      $uploaded = $tempSave->saveAs($dir.'/'.$tempSave->getName()); 
      $this->redirect(array('/products/index')); 
     } 
} else { 
    //initialize defaults 
    $model->product_id=intval($_GET['product_id']); 
} 
+0

完美的作品!非常感謝Pentium10! – JoenMarz 2014-09-06 07:59:25

相關問題