Показать уменьшенное изображение и удалить изображение в пользовательской форме модуля администратора

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'] );

Кроме того, я не мог изменить URL из Image.phpфайла, так как это повлияет на другие системные модули. есть ли обходной путь здесь. Пожалуйста, предложите решение.

И я также хочу, чтобы удалить изображение с помощью флажка ниже кнопки загрузки.

Спасибо.

HungryDB
источник

Ответы:

9

Добавьте код в ваш файл контроллера

публичная функция saveAction () 
{
    ...

    if (! empty ($ _FILES ['main_image'] ['name'])) 
    {
        $ data ['main_image'] = $ _FILES ['main_image'] ['name'];
    } 
    еще 
    {
        if (isset ($ data ['main_image'] ['delete']) && $ data ['main_image'] ['delete'] == 1) 
        {
            if ($ data ['main_image'] ['value']! = '')
                $ Этом-> removeFile ($ данные [ 'main_image'] [ 'значение']);
            $ data ['main_image'] = '';
        }
        еще 
        {
            переменная не установлена ​​($ данных [ 'main_image']);
        }
    }

    ...
}
публичная функция removeFile ($ file) 
{
        $ _helper = Mage :: helper ('ram');
        $ file = $ _helper-> updateDirSepereator ($ file);
        $ directory = Mage :: getBaseDir ('media'). DS.'Ram_images ';
        $ io = new Varien_Io_File ();
        $ result = $ io-> rmdir ($ directory, true);
}

Создать функцию ниже в классе помощника

 публичная функция updateDirSepereator ($ path) 
    {
        return str_replace ('\\', DS, $ path);
    }
Виная Махешвари
источник
Я попробую это, я надеюсь, что это работает
HungryDB
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) { }
       }

Ваша форма редактирования будет отображаться как:

введите описание изображения здесь

Суправат Мондал
источник
Я уже загрузил изображение. я просто хочу, чтобы он отображался в виде эскиза в форме редактирования.
HungryDB
Над кодом будет отображаться изображение в вашей форме редактирования.
Суправат Мондал
Да, наверное. Но я использую $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
источник
Привет @HungryDB, у меня это тоже получилось, но частично. Изображения загружаются, но миниатюра не отображается в форме, только кнопка просмотра. Должен ли я добавить функцию к помощнику, чтобы она работала?
bestwebdevs
используйте тип поляimage
HungryDB
Привет @HungryDB, я сделал, но он все еще показывает только кнопку.
bestwebdevs