2010-01-29 3 views
2

아래의 코드를 사용하여 관리 양식에 "Image"유형의 입력 필드를 설정했습니다.Magento : Adminhtml 양식의 "이미지"필드

<?php 
// Tab Form 
// File: app/code/local/MyCompany/Mymodule/Block/Adminhtml/Items/Edit/Tab/Form.php 

class MyCompany_Mymodule_Block_Adminhtml_Items_Edit_Tab_Form extends Mage_Adminhtml_Block_Widget_Form 
{ 
    protected function _prepareForm() 
    { 
     $form = new Varien_Data_Form(); 
     $this->setForm($form); 
     $fieldset = $form->addFieldset('mymodule_form',  array('legend'=>Mage::helper('mymodule')->__('Item information')));  

     $fieldset->addField('photo', 'image', array(
      'label'  => Mage::helper('mymodule')->__('Photo'), 
      'required' => false, 
      'name'  => 'photo', 
    ));  

     if (Mage::getSingleton('adminhtml/session')->getMymoduleData()) 
     { 
      $form->setValues(Mage::getSingleton('adminhtml/session')->getMymoduleData()); 
      Mage::getSingleton('adminhtml/session')->setMymoduleData(null); 
     } elseif (Mage::registry('mymodule_data')) { 
      $form->setValues(Mage::registry('mymodule_data')->getData()); 
     } 
     return parent::_prepareForm(); 
    } 
} 

그런 다음 컨트롤러 내부에서 이미지를 저장하십시오.

public function saveAction() 
{ 
if($data = $this->getRequest()->getPost()) {    
    $model = Mage::getModel('mymodule/speakers');   
    $model->setData($data)->setId($this->getRequest()->getParam('id')); 

    $model->setKeynote($this->getRequest()->getParam('keynote')); 

    // Save photo 
    if(isset($_FILES['photo']['name']) && $_FILES['photo']['name'] != '') { 
     try {  
      $uploader = new Varien_File_Uploader('photo'); 

      $uploader->setAllowedExtensions(array('jpg','jpeg','gif','png')); 
      $uploader->setAllowRenameFiles(false); 
      $uploader->setFilesDispersion(false); 

      // Set media as the upload dir 
      $media_path = Mage::getBaseDir('media') . DS;     

      // Upload the image 
      $uploader->save($media_path, $_FILES['photo']['name']); 

      $data['photo'] = $media_path . $_FILES['photo']['name']; 

     } 
     catch (Exception $e) { 
      print_r($e); 
      die; 
     }        
    } 
    else {  
     if(isset($data['photo']['delete']) && $data['photo']['delete'] == 1) { 
      $data['photo'] = ''; 
     } 
     else { 
      unset($data['photo']); 
     } 
     } 
    if(isset($data['photo'])) $model->setPhoto($data['photo']);  

    try {     
     $model->save(); 

     Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('mymodule')->__('Item was successfully saved')); 
     Mage::getSingleton('adminhtml/session')->setFormData(false); 

     if ($this->getRequest()->getParam('back')) { 
      $this->_redirect('*/*/edit', array('id' => $model->getId())); 
      return; 
     } 
     $this->_redirect('*/*/'); 
     return; 
    } 
    catch (Exception $e) { 
     Mage::getSingleton('adminhtml/session')->addError($e->getMessage()); 
     Mage::getSingleton('adminhtml/session')->setFormData($data); 
     $this->_redirect('*/*/edit', array('id' => $this->getRequest()->getParam('id'))); 
     return; 
    } 
} 

Mage::getSingleton('adminhtml/session')->addError(Mage::helper('mymodule')->__('Unable to find item to save')); 
$this->_redirect('*/*/'); 
} 

짧은 설명 : 백엔드에서 저장 또는 저장하고 계속 편집을 사용하여 항목을 저장하면 한 번 저장하는 것이 좋습니다. 다음 번에 다음 오류가 발생합니다.

Notice: Array to string conversion in /home/wwwadmin/public_html/aaa.bbb.ccc/public/lib/Zend/Db/Statement/Pdo.php on line 232

다음으로 저장됩니다. 다음 : 오류. 다음 ok ... 내가 무슨 뜻인지 알지 ...

이 입력 유형이 어떻게 사용되는지 보려면 몇 가지 코드를 찾고있었습니다. 그러나 아직. 마젠타 코드 안쪽에도. 이것은 내가 발견 한 유일한 것입니다 : http://www.magentocommerce.com/wiki/how_to/how_to_create_pdf_upload_in_backend_for_own_module

어떤 아이디어?

감사

답변

0

: 컨트롤러에 조치를 저장하기위한 코드를 아래에보십시오

$model->setData($data)->setId($this->getRequest()->getParam('id'));<br/> 
$model->_data['image'] will be set to array('image'=>'[YOUR path]')<br/> 

당신이 data['image'];

0

모든 조작 후에 방법 setData() 호출해야

if ($data = $this->getRequest()->getPost()) { 
     $id = $this->getRequest()->getParam('id'); 
     $model = Mage::getModel('your_model')->load($id); 

     if (isset($data['image']['delete'])) { 
      Mage::helper('your_helper')->deleteImageFile($data['image']['value']); 
     } 
     $image = Mage::helper('your_helper')->uploadBannerImage(); 
     if ($image || (isset($data['image']['delete']) && $data['image']['delete'])) { 
      $data['image'] = $image; 
     } else { 
      unset($data['image']); 
     }    
     $model->setData($data) 
       ->setId($id); 
     try { 
      $model->save(); 
      Mage::getSingleton('adminhtml/session')->addSuccess('Your request Save.'); 
      $this->_redirect('*/*/'); 
     } catch (Exception $e) { 
      Mage::getSingleton('adminhtml/session')->addError($e->getMessage()); 
      Mage::getSingleton('adminhtml/session')->setFormData($data); 
      $this->_redirect('*/*/edit', array('id' => $this->getRequest()->getParam('id'))); 
      return; 
     } 
    } else { 
     Mage::getSingleton('adminhtml/session')->addError(Mage::helper('your_helper')->__('Unable to find your request to save')); 
     $this->_redirect('*/*/'); 
    } 

도우미로

public function uploadBannerImage() { 
    $path = Mage::getBaseDir('media') . DS . 'images'; 
    $image = ""; 
    if (isset($_FILES['image']['name']) && $_FILES['image']['name'] != '') { 
     try { 
      /* Starting upload */ 
      $uploader = new Varien_File_Uploader('image'); 

      // Any extention would work 
      $uploader->setAllowedExtensions(array(
       'jpg', 'jpeg', 'gif', 'png' 
      )); 
      $uploader->setAllowRenameFiles(true); 

      $uploader->setFilesDispersion(true); 

      $uploader->save($path, $uploader->getCorrectFileName($_FILES['image']['name'])); 
      $image = substr(strrchr($uploader->getUploadedFileName(), "/"), 1); 
     } catch (Exception $e) { 
      Mage::getSingleton('customer/session')->addError($e->getMessage()); 
     } 
    } 
    return $image; 
} 

    public function deleteImageFile($image) { 
    if (!$image) { 
     return; 
    } 
    try { 
     $img_path = Mage::getBaseDir('media') . "/" . $image; 
     if (!file_exists($img_path)) { 
      return; 
     } 
     unlink($img_path); 
    } catch (Exception $exc) { 
     echo $exc->getTraceAsString(); 
    } 
}