在自定义模块管理表单中显示缩略图和删除图像


8

我正试图在这样的自定义管理模块编辑表单中显示缩略图, 在此处输入图片说明 现在我正在使用它addfield

 $fieldset->addField('main_image', 'image', array(
        'label'     => Mage::helper('ram')->__('Image'),
        'required'  => false,
        'name'      => 'main_image',
    ));

我看了一下lib/Varien/Data/Form/Element/Image.php,发现此代码在那里使用图像url。

public function getElementHtml()
    {
        $html = '';

        if ((string)$this->getValue()) {
            $url = $this->_getUrl();

            if( !preg_match("/^http\:\/\/|https\:\/\//", $url) ) {
                $url = Mage::getBaseUrl('media') . $url;
            }

但是我没有将图像存储在该模块的媒体文件夹中。我正在从ram_images文件夹中的控制器上传图像。

 $path = Mage::getBaseDir('media') . DS .'ram_images' ;
   $uploader->save($path, $_FILES['main_image']['name'] );

另外,我无法从Image.php文件更改URL,因为它将影响其他系统模块。这里有任何解决方法。请提出解决方案。

我也想使用上传按钮下方提供的复选框删除图像。

谢谢。

Answers:


9

将代码添加到您的控制器文件中

公共函数saveAction() 
{
    ...

    如果(!empty($ _FILES ['main_image'] ['name'])) 
    {
        $ data ['main_image'] = $ _FILES ['main_image'] ['name'];
    } 
    其他 
    {
        if(isset($ data ['main_image'] ['delete'])&& $ data ['main_image'] ['delete'] == 1) 
        {
            如果($ data ['main_image'] ['value']!='')
                $ this-> removeFile($ data ['main_image'] ['value']);
            $ data ['main_image'] ='';
        }
        其他 
        {
            unset($ data ['main_image']);
        }
    }

    ...
}
公共函数removeFile($ file) 
{
        $ _helper =法师:: helper('ram');
        $ file = $ _helper-> updateDirSepereator($ file);
        $ directory = Mage :: getBaseDir('media')。DS .'ram_images';
        $ io =新的Varien_Io_File();
        $ result = $ io-> rmdir($ directory,true);
}

在Helper类中创建以下函数

 公共函数updateDirSepereator($ path) 
    {
        返回str_replace('\\',DS,$ path);
    }

我会尝试的,我希望它能起作用
HungryDB 2014年

6

添加 'enctype'’ ⇒ 'multipart/form-data'那应该有助于获得一些东西 $_FILES

在/app/code/local/Chilly/ModName/Block/Adminhtml/ModName/Edit/Form.php中

您应该具有以下外观:

$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/code/local/Chilly/ModName/Block/Adminhtml/ModName/Edit/Tab/Form.php中

$fieldset->addField('main_image', 'image', array(
    'label'     => Mage::helper('ram')->__('Image'),
    'required'  => false,
    'name'      => 'main_image',
));

然后在/app/code/local/Chilly/ModName/controllers/Adminhtml/ModuleNameController.php中 saveAction()

        if(isset($_FILES['main_images']['name'])) {
          try {
            $uploader = new Varien_File_Uploader('main_images');
            $uploader->setAllowedExtensions(array('jpg','jpeg','gif','png')); // or pdf or anything
            $uploader->setAllowRenameFiles(false);
            $uploader->setFilesDispersion(false);
            $path = Mage::getBaseDir('media') . DS. 'ram_images'.DS ;
            $destFile = $path.$_FILES['main-images']['name'];
            $filename = $uploader->getNewFileName($destFile);
            $uploader->save($path, $filename);
            $data[main_images] = 'ram_images'. $filename;
          }catch(Exception $e) { }
       }

您的编辑表单将显示为as ..

在此处输入图片说明


我已经上传了图片。我只希望它在编辑表单上显示为缩略图。
HungryDB

上面的代码将在您的编辑表单中显示图像。
Supravat Mondal 2014年

是的,可能 但是我正在使用$path = Mage::getBaseDir('media') . DS .'ram_images';此路径上传图像。
HungryDB

4

我想我在这里有一个显示缩略图的简单解决方案。

if(isset($_FILES['main_images']['name'])) {
          try {
            $uploader = new Varien_File_Uploader('main_images');
            $uploader->setAllowedExtensions(array('jpg','jpeg','gif','png'));
            $uploader->setAllowRenameFiles(false);
            $uploader->setFilesDispersion(false);
            $path = Mage::getBaseDir('media') . / ;
            $uploader->save($path, $_FILES['main_images']['name']);
            $data[main_images] ='ram_images'. $_FILES['main_images']['name'];
          }catch(Exception $e) { }
       }

只是在表中也保存了文件夹名称,因此可以正常工作。

要删除图像,只需在模块控制器saveAction()功能中添加以下代码即可。

if (!empty( $_FILES['main_image']['name'] )) 
 {
    $data['main_image'] =  $_FILES['main_image']['name'] ;
 } 
 else 
 {
     if (isset($data['main_image']['delete']) && $data['main_image']['delete'] == 1) 
     {
         $data['main_image']='';
     }
     else 
     { 
         unset($data['main_iamge']);
      }
 }

有效。


@HungryDB,您好,这对我也有效,但有一部分。图片正在上传,但缩略图未显示在表单上,​​仅显示了浏览按钮。我是否还必须向助手添加功能才能使其正常工作?
bestwebdevs

使用字段类型image
HungryDB '17

@HungryDB,您好,我做到了,但是它仍然只显示按钮。
bestwebdevs
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.