Mostrar imagem em miniatura e excluir imagem no formulário de administração do módulo personalizado


8

Estou tentando exibir a imagem em miniatura no meu formulário de edição do módulo de administração personalizado como este insira a descrição da imagem aqui . Agora, estou usando isso addfield.

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

Eu olhei lib/Varien/Data/Form/Element/Image.phpe encontrei este código que usa imagens url lá.

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

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

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

Mas não estou armazenando imagens na pasta media para este módulo. Estou carregando imagens do controlador na ram_imagespasta.

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

Além disso, não foi possível alterar a URL do Image.phparquivo, pois isso afetará outros módulos do sistema. existe alguma solução alternativa aqui. Por favor, sugira uma solução.

E também quero excluir a imagem usando a caixa de seleção fornecida abaixo do botão de upload.

Obrigado.

Respostas:


9

Adicione o código ao seu arquivo de controlador

função pública saveAction () 
{
    ...

    if (! vazio ($ _FILES ['main_image'] ['nome']))) 
    {
        $ data ['main_image'] = $ _FILES ['main_image'] ['nome'];
    } 
    outro 
    {
        if (isset ($ data ['imagem_principal'] ['excluir']) && $ data ['imagem_principal'] ['excluir'] == 1) 
        {
            if ($ data ['imagem_principal'] ['valor']! = '')
                $ this-> removeFile ($ data ['imagem_principal'] ['valor']);
            $ data ['main_image'] = '';
        }
        outro 
        {
            desabilitado ($ data ['imagem_inicial']);
        }
    }

    ...
}
função pública removeFile ($ file) 
{
        $ _helper = Mage :: helper ('ram');
        $ file = $ _helper-> updateDirSepereator ($ arquivo);
        $ directory = Mage :: getBaseDir ('mídia'). DS .'ram_images ';
        $ io = new Varien_Io_File ();
        $ resultado = $ io-> rmdir (diretório $, true);
}

Criar abaixo da função na classe auxiliar

 função pública updateDirSepereator ($ path) 
    {
        return str_replace ('\\', DS, $ caminho);
    }

Vou tentar isso, eu espero que funcione
HungryDB

6

Adicionar 'enctype'’ ⇒ 'multipart/form-data'Isso deve ajudar a obter algo $_FILES

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

Você deve ter algo parecido com isto:

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

    )

);

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

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

O formulário de edição do seu será exibido como imagem ..

insira a descrição da imagem aqui


Eu já carreguei a imagem. Eu só quero que ele seja exibido como uma miniatura no formulário de edição.
HungryDB

O código acima será exibido na imagem em seu formulário de edição.
Supravat Mondal

Sim, Provavelmente. Mas estou usando $path = Mage::getBaseDir('media') . DS .'ram_images';esse caminho para fazer upload de imagens.
HungryDB

4

Eu acho que tenho uma solução simples aqui para exibir a imagem em 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) { }
       }

acabou de salvar o nome da pasta também na tabela e funcionou.

Para excluir a imagem, basta adicionar o seguinte código à saveAction()função dos controladores do 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']);
      }
 }

Funcionou.


Oi @HungryDB, isso funcionou para mim também, mas parcialmente. As imagens estão sendo carregadas, mas a miniatura não aparece no formulário, apenas no botão Procurar. Tenho que adicionar uma função ao auxiliar também para fazê-lo funcionar?
bestwebdevs

use type typeimage
HungryDB

Oi @HungryDB, sim, mas ele ainda mostra apenas o botão.
bestwebdevs 30/05
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.