2011-11-09 60 views
1

我需要为Magento博客模块(AW博客)中的帖子创建图片上传字段。 因此,每个帖子都需要包含一张图片。Magento自定义图片上传不起作用

我编辑了以下文件: /home/clients/websites/w_gale/public_html/gale/app/code/community/AW/Blog/Block/Manage/Blog/Edit/Tab/Form.php

加入字段集是这样的:

$fieldset->addField('fileinputname', 'image', array(
      'label'  => Mage::helper('blog')->__('Upload image'), 
      'required' => false, 
      'name'  => 'fileinputname', 
      'required' => true, 
      'style'  => 'height:100px;border:2px solid #999;', 
    )); 

在这个文件的顶部,在正确的位置,我所定义的形式是这样的:

$form = new Varien_Data_Form(array(
      'id' => 'edit_form', 
      'action' => $this->getUrl('*/*/save', array('id' => $this->getRequest()->getParam('id'))), 
      'method' => 'post', 
      'enctype' => 'multipart/form-data', 
     ) 
    ); 

在Blogcontroller.php添加以下代码,只是b ellow if ($data = $this->getRequest()->getPost()) { line

if(isset($_FILES['fileinputname']['name']) && (file_exists($_FILES['fileinputname']['tmp_name']))) { 
      try { 

       $uploader = new Varien_File_Uploader('fileinputname'); 

       $uploader->setAllowedExtensions(array('jpg','jpeg','gif','png')); // or pdf or anything 

       $uploader->setAllowRenameFiles(true); 
       $uploader->setFilesDispersion(false); 

       $path = Mage::getBaseDir('media') . DS ; 

       $uploader->save($path, $_FILES['fileinputname']['name']); 

       $data['imageurl'] = $_FILES['fileinputname']['name']; 

      } catch(Exception $e) { 

      } 
     } else {  

      if(isset($data['fileinputname']['delete']) && $data['fileinputname']['delete'] == 1) 
       $data['imageurl'] = ''; 
      else 
       unset($data['fileinputname']); 
     } 

但是,上传不起作用。我究竟做错了什么? 我在数据库的相应字段中添加了一个特殊行。 当我手动输入时,前端部分显示数据库值。

谢谢

回答

2

这个代码从上传图像的数据帮助程序。你需要实现方法getBaseDir()(它返回你希望存储你上传的文件的目录)。

/** 
* Upload image and return uploaded image file name or false 
* 
* @throws Mage_Core_Exception 
* @param string $scope the request key for file 
* @return bool|string 
*/ 
public function uploadImage($scope) 
{ 
    $adapter = new Zend_File_Transfer_Adapter_Http(); 
    $adapter->addValidator('ImageSize', true, $this->_imageSize); 
    $adapter->addValidator('Size', true, $this->_maxFileSize); 
    if ($adapter->isUploaded($scope)) { 
     // validate image 
     if (!$adapter->isValid($scope)) { 
      Mage::throwException(Mage::helper('mycompany_mymodule')->__('Uploaded image is not valid')); 
     } 
     $upload = new Varien_File_Uploader($scope); 
     $upload->setAllowCreateFolders(true); 
     $upload->setAllowedExtensions(array('jpg', 'gif', 'png')); 
     $upload->setAllowRenameFiles(true); 
     $upload->setFilesDispersion(false); 
     if ($upload->save($this->getBaseDir())) { 
      return $upload->getUploadedFileName(); 
     } 
    } 
    return false; 
} 
0

您使用的是正确的代码。我通过使用正确的MYSQL数据类型解决了这个问题。当我改变了从“文”的数据类型为“VARCHAR(255)”它解决了这个问题

而且......确保你添加以下代码:

$form = new Varien_Data_Form(array(
     'id' => 'edit_form', 
     'action' => $this->getUrl('*/*/save', array('id' => $this->getRequest()->getParam('id'))), 
     'method' => 'post', 
     'enctype' => 'multipart/form-data', 
    ) 
); 

在/ app /码/community/AW/Blog/Block/Manage/Blog/Edit/Form.php NOT:app/code/community/AW/Blog/Block/Manage/Blog/Edit/Tab/Form.php