Afficher l'image miniature et supprimer l'image dans le formulaire d'administration du module personnalisé

8

J'essaie d'afficher une image miniature dans mon formulaire d'édition de module d'administration personnalisé comme celui-ci entrez la description de l'image ici En ce moment, j'utilise ceci addfield.

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

J'ai regardé lib/Varien/Data/Form/Element/Image.phpet trouvé ce code qui utilise des images URL ici.

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

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

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

Mais je ne stocke pas d'images dans le dossier multimédia de ce module. Je télécharge des images du contrôleur dans le ram_imagesdossier.

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

De plus, je ne pouvais pas changer l'URL du Image.phpfichier car cela affecterait les autres modules du système. y a-t-il une solution de contournement ici. Veuillez suggérer une solution.

Et je veux également supprimer l'image en utilisant la case à cocher fournie sous le bouton de téléchargement.

Merci.

HungryDB
la source

Réponses:

9

Ajoutez le code dans votre fichier contrôleur

fonction publique saveAction () 
{
    ...

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

    ...
}
fonction publique 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);
}

Créer la fonction ci-dessous dans la classe d'assistance

 fonction publique updateDirSepereator ($ path) 
    {
        return str_replace ('\\', DS, $ path);
    }
Vinaya Maheshwari
la source
je vais essayer ça, j'espère que ça marche
HungryDB
6

Ajouter 'enctype'’ ⇒ 'multipart/form-data'Cela devrait aider à obtenir quelque chose $_FILES

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

Vous devriez avoir quelque chose qui ressemble à ceci:

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

    )

);

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

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

Le formulaire d'édition de votre sera afficher l'image comme ..

entrez la description de l'image ici

Supravat Mondal
la source
J'ai déjà téléchargé une image. je veux juste qu'il s'affiche sous forme de miniature sur le formulaire d'édition.
HungryDB
Le code ci-dessus affichera l'image dans votre formulaire d'édition.
Supravat Mondal
Ouais, probablement. Mais j'utilise $path = Mage::getBaseDir('media') . DS .'ram_images';ce chemin pour télécharger des images.
HungryDB
4

Je pense que j'ai ici une solution simple pour afficher une image miniature.

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

juste enregistré le nom du dossier aussi dans le tableau et cela a fonctionné.

Pour supprimer l'image vient d'ajouter le code suivant à la saveAction()fonction des contrôleurs de module .

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

Ça a marché.

HungryDB
la source
Bonjour @HungryDB, cela a également fonctionné pour moi, mais en partie. Les images sont en cours de téléchargement, mais la miniature n'apparaît pas sur le formulaire, uniquement le bouton de navigation. Dois-je également ajouter une fonction à helper pour la faire fonctionner?
bestwebdevs
utiliser le type de champimage
HungryDB
Salut @HungryDB, je l'ai fait, mais il ne montre que le bouton.
bestwebdevs