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.

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

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


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é.


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.