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.

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

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


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.


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.