Mostrar imagen en miniatura y eliminar imagen en el formulario de administración del módulo personalizado

8

Estoy tratando de mostrar una imagen en miniatura en mi formulario de edición de módulo de administración personalizado como este ingrese la descripción de la imagen aquí En este momento estoy usando esto addfield.

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

Miré lib/Varien/Data/Form/Element/Image.phpy encontré este código que usa imágenes url allí.

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

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

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

Pero no estoy almacenando imágenes en la carpeta de medios para este módulo. Estoy cargando imágenes del controlador en la ram_imagescarpeta.

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

Además, no pude cambiar la URL del Image.phparchivo, ya que afectará a otros módulos del sistema. ¿Hay alguna solución aquí? Por favor sugiera una solución.

Y también quiero eliminar la imagen usando la casilla de verificación proporcionada debajo del botón de carga.

Gracias.

HungryDB
fuente

Respuestas:

9

Agregue el código en su archivo de controlador

función pública saveAction () 
{
    ...

    if (! empty ($ _FILES ['main_image'] ['name'])) 
    {
        $ data ['main_image'] = $ _FILES ['main_image'] ['name'];
    } 
    más 
    {
        if (isset ($ data ['main_image'] ['delete']) && $ data ['main_image'] ['delete'] == 1) 
        {
            if ($ data ['main_image'] ['value']! = '')
                $ this-> removeFile ($ data ['main_image'] ['value']);
            $ data ['main_image'] = '';
        }
        más 
        {
            unset ($ data ['main_image']);
        }
    }

    ...
}
función pública removeFile ($ file) 
{
        $ _helper = Mage :: helper ('ram');
        $ archivo = $ _helper-> updateDirSepereator ($ archivo);
        $ directorio = Mage :: getBaseDir ('media'). DS .'ram_images ';
        $ io = nuevo Varien_Io_File ();
        $ resultado = $ io-> rmdir ($ directorio, verdadero);
}

Crear la siguiente función en Helper Class

 función pública updateDirSepereator ($ ruta) 
    {
        return str_replace ('\\', DS, $ ruta);
    }
Vinaya Maheshwari
fuente
intentaré esto, espero que funcione
HungryDB
6

Agregar 'enctype'’ ⇒ 'multipart/form-data'eso debería ayudar a conseguir algo $_FILES

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

Deberías tener algo así:

$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'

    )

);

Luego en /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',
));

Luego en /app/code/local/Chilly/ModName/controllers/Adminhtml/ModuleNameController.php en 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) { }
       }

El formulario de edición de su se mostrará la imagen como ..

ingrese la descripción de la imagen aquí

Supravat Mondal
fuente
Ya he subido la imagen. Solo quiero que se muestre como una miniatura en el formulario de edición.
HungryDB
El código anterior mostrará la imagen en su formulario de edición.
Supravat Mondal
Si, probablemente. Pero estoy usando $path = Mage::getBaseDir('media') . DS .'ram_images';esta ruta para subir imágenes.
HungryDB
4

Creo que obtuve una solución simple aquí para mostrar imágenes en miniatura.

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) { }
       }

acabo de guardar el nombre de la carpeta también en la tabla y funcionó.

Para eliminar la imagen que acaba de agregar el siguiente código a la saveAction()función de controladores del módulo .

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

Funcionó.

HungryDB
fuente
Hola @HungryDB, esto también funcionó para mí, pero parcialmente. Las imágenes se están cargando, pero la miniatura no se muestra en el formulario, solo el botón Examinar. ¿Tengo que agregar una función a helper también para que funcione?
bestwebdevs
use el tipo de campoimage
HungryDB
Hola @HungryDB, lo hice, pero todavía solo muestra el botón.
bestwebdevs