【问题标题】:Magento Custom Admin Module with a Image File带有图像文件的 Magento 自定义管理模块
【发布时间】:2015-09-11 16:02:14
【问题描述】:

我正在尝试在 Magento 中创建一个管理模块。

第 1 步: 其中包含以下字段

第 2 步:填充一些值和图像

第 3 步:当我尝试保存此项目时,该项目已成功保存,但此处未显示图像。但实际上,这些图像是复制到我的 Magento Media 文件夹中的。

第4步:项目保存成功后显示如下

但实际上我希望它显示这样的东西

这是我的代码,请找到它。

_prepareForm() - 字段集代码:

$fieldset->addField('image', 'file', array(
    'label'     => Mage::helper('modulename')->__('Image'),
    'name'      => 'image',
    'note' => '(*.jpg, *.png, *.gif)',
));

_prepareForm()

<?php
class Namespace_ModuleName_Block_Adminhtml_Measurement_Edit_Form extends Mage_Adminhtml_Block_Widget_Form
{
  protected function _prepareForm()
  {
      $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'
                                   )
      );
      $form->setUseContainer(true);
      $this->setForm($form);
      return parent::_prepareForm();
  }
}
?>

saveAction()

public function saveAction() {
    if ($data = $this->getRequest()->getPost()) {
        $model = Mage::getModel('modulename/modulename');
        $model->setData($data)->setId($this->getRequest()->getParam('id'));
        try {
            if ($model->getCreatedTime == NULL || $model->getUpdateTime() == NULL) {
                $model->setCreatedTime(now())
                    ->setUpdateTime(now());
            } else {
                $model->setUpdateTime(now());
            }
            $model->save();
            if(isset($_FILES['image']['name']) and (file_exists($_FILES['image']['tmp_name']))) {
                try {
                    $uploader = new Varien_File_Uploader('image');
                    $uploader->setAllowedExtensions(array('jpg','jpeg','gif','png')); // or pdf or anything
                    $uploader->setAllowRenameFiles(false);
                    // setAllowRenameFiles(true) -> move your file in a folder the magento way
                    // setAllowRenameFiles(true) -> move your file directly in the $path folder
                    $uploader->setFilesDispersion(false);
                    $path = Mage::getBaseDir('media') . '/modulename_images/' ;
                    $uploader->save($path, $model->getId().'.jpg');
                    $model->setImage($model->getId().'.jpg');
                    $model->save();
                }catch(Exception $e) {
                    print_r($e);
                    die;
                }
            }
            else {       
                if(isset($data['image']['delete']) && $data['image']['delete'] == 1)
                $data['image_main'] = '';
                else
                unset($data['image']);
            }

            // Mage::getModel('modulename/flatrates')->saveMultipleFlatrates($data, $model->getId(),$this->getRequest()->getParam('cat_id'));
            Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('modulename')->__('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('modulename')->__('Unable to find item to save'));
    $this->_redirect('*/*/');
}

我在这里做错了吗?

有什么想法吗?

如果有任何拼写错误我真的很抱歉。

【问题讨论】:

  • 你能把代码发给我吗?到 moo.alyan@gmail.com

标签: php magento


【解决方案1】:

为了获得图像预览,你必须使用image字段类型,而不是file,像这样(看第二个参数):

$fieldset->addField('image', 'image', array(
    'label'     => Mage::helper('modulename')->__('Image'),
    'name'      => 'image',
    'note' => '(*.jpg, *.png, *.gif)',
));

【讨论】:

  • 我刚刚注意到在您的控制器中,您只需保存文件名。您必须将整个路径保存在模型中(即$model-&gt;setImage($path.$model-&gt;getId().'.jpg');
  • 是的,但我没有任何问题。
  • 这是因为您已将图像存储在媒体文件夹的子目录中,因此您必须在显示之前设置图像字段的值()。就像在 editAction()上一样
【解决方案2】:

这是因为您将图像存储在媒体文件夹的子目录中,因此您必须在显示之前设置图像字段的值()。 就像在 EditAction() 中添加这个代码这里是我的字段名称 profile_pic

if($model->getProfilePic())
{
  $model->setProfilePic('testimonial/'.$model->getProfilePic());
}

或者您可以使用助手来预览该图像

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-06
    • 1970-01-01
    • 2012-01-05
    • 2010-11-09
    • 1970-01-01
    • 2013-10-06
    相关资源
    最近更新 更多