Question

J'essaie d'afficher une image miniature dans le formulaire d'édition de mon module d'administration personnalisé comme celui-cienter image description hereEn ce moment j'utilise ça 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.php et j'ai trouvé ce code qui utilise l'URL des images.

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 pour ce module.Je télécharge des images du contrôleur dans ram_images dossier.

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

De plus, je n'ai pas pu modifier l'URL de Image.php fichier car cela affectera les autres modules du système.y a-t-il une solution de contournement ici.Veuillez suggérer une solution.

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

Merci.

Était-ce utile?

La solution

Ajoutez le code dans votre fichier de contrôleur

public function 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) 
        {
            if ($data['main_image']['value'] != '')
                $this->removeFile($data['main_image']['value']);
            $data['main_image'] = '';
        }
        else 
        {
            unset($data['main_image']);
        }
    }

    ...
}
public function 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

 public function updateDirSepereator($path) 
    {
        return str_replace('\\', DS, $path);
    }

Autres conseils

Ajouter 'enctype'’ ⇒ 'multipart/form-data' Cela devrait aider à introduire 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) { }
       }

Votre formulaire de modification affichera une image comme celle-ci.

enter image description here

Je pense que j'ai une solution simple ici 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) { }
       }

je viens également d'enregistrer le nom du dossier dans le tableau et cela a fonctionné.

Pour supprimer l'image, ajoutez simplement le code suivant aux contrôleurs de module saveAction() fonction.

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top