Miniaturbild anzeigen und Bild im benutzerdefinierten Modulverwaltungsformular löschen

8

Ich versuche, ein Miniaturbild in meinem Bearbeitungsformular für benutzerdefinierte Verwaltungsmodule wie folgt anzuzeigen. Im Geben Sie hier die Bildbeschreibung ein Moment verwende ich dies addfield.

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

Ich habe mir lib/Varien/Data/Form/Element/Image.phpdiesen Code angesehen und gefunden, der dort die URL der Bilder verwendet.

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

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

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

Ich speichere jedoch keine Bilder im Medienordner für dieses Modul. Ich lade Bilder vom Controller in den ram_imagesOrdner hoch.

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

Außerdem konnte ich die URL von der Image.phpDatei nicht ändern, da dies Auswirkungen auf andere Systemmodule hat. Gibt es hier eine Problemumgehung? Bitte schlagen Sie eine Lösung vor.

Außerdem möchte ich das Bild mithilfe des Kontrollkästchens unter der Schaltfläche zum Hochladen löschen.

Vielen Dank.

HungryDB
quelle

Antworten:

9

Fügen Sie den Code in Ihre Controller-Datei ein

öffentliche Funktion saveAction () 
{
    ...

    if (! empty ($ _FILES ['main_image'] ['name'])) 
    {
        $ data ['main_image'] = $ _FILES ['main_image'] ['name'];
    }} 
    sonst 
    {
        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'] = '';
        }}
        sonst 
        {
            nicht gesetzt ($ data ['main_image']);
        }}
    }}

    ...
}}
öffentliche Funktion 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);
}}

Erstellen Sie die folgende Funktion in der Hilfsklasse

 öffentliche Funktion updateDirSepereator ($ path) 
    {
        return str_replace ('\\', DS, $ path);
    }}
Vinaya Maheshwari
quelle
Ich werde es versuchen, ich hoffe es funktioniert
HungryDB
6

Hinzufügen 'enctype'’ ⇒ 'multipart/form-data'Das sollte helfen, etwas in zu bekommen $_FILES

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

Sie sollten etwas haben, das so aussieht:

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

    )

);

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

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

Ihr Bearbeitungsformular wird wie folgt angezeigt:

Geben Sie hier die Bildbeschreibung ein

Supravat Mondal
quelle
Ich habe bereits ein Bild hochgeladen. Ich möchte nur, dass es als Miniaturbild im Bearbeitungsformular angezeigt wird.
HungryDB
Der obige Code zeigt das Bild in Ihrem Bearbeitungsformular an.
Supravat Mondal
Ja, wahrscheinlich. Aber ich benutze $path = Mage::getBaseDir('media') . DS .'ram_images';diesen Pfad, um Bilder hochzuladen.
HungryDB
4

Ich glaube, ich habe hier eine einfache Lösung gefunden, um Miniaturbilder anzuzeigen.

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

habe gerade auch den Ordnernamen in der Tabelle gespeichert und es hat funktioniert.

Zum Löschen des Bildes wurde gerade der folgende Code zur saveAction()Funktion der Modulsteuerungen hinzugefügt .

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

Es funktionierte.

HungryDB
quelle
Hallo @HungryDB, das hat auch bei mir funktioniert, aber teilweise. Die Bilder werden hochgeladen, aber die Miniaturansicht wird nicht im Formular angezeigt, sondern nur die Schaltfläche zum Durchsuchen. Muss ich dem Helfer auch eine Funktion hinzufügen, damit sie funktioniert?
Bestwebdevs
image
Feldtyp
Hallo @HungryDB, ich habe es getan, aber es zeigt immer noch nur die Schaltfläche.
Bestwebdevs