Tampilkan gambar kecil dan hapus gambar dalam formulir admin modul khusus

8

Saya mencoba untuk menampilkan gambar mini di formulir edit modul admin kustom saya seperti ini. masukkan deskripsi gambar di sini Sekarang saya menggunakan ini addfield.

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

Saya melihat lib/Varien/Data/Form/Element/Image.phpdan menemukan kode ini yang menggunakan gambar url di sana.

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

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

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

Tapi saya tidak menyimpan gambar di folder media untuk modul ini. Saya mengunggah gambar dari pengontrol di ram_imagesfolder.

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

Juga, saya tidak dapat mengubah URL dari Image.phpfile karena akan mempengaruhi modul sistem lainnya. apakah ada solusi di sini. Mohon saran solusinya.

Dan saya juga ingin menghapus gambar menggunakan kotak centang yang disediakan di bawah tombol unggah.

Terima kasih.

HungryDB
sumber

Jawaban:

9

Tambahkan kode dalam file pengontrol Anda

fungsi publik saveAction () 
{
    ...

    if (! kosong ($ _FILES ['main_image'] ['name'])) 
    {
        $ data ['main_image'] = $ _FILES ['main_image'] ['name'];
    } 
    lain 
    {
        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'] = '';
        }
        lain 
        {
            tidak disetel ($ data ['main_image']);
        }
    }

    ...
}
fungsi publik removeFile ($ file) 
{
        $ _helper = Mage :: helper ('ram');
        $ file = $ _helper-> updateDirSepereator ($ file);
        $ directory = Mage :: getBaseDir ('media'). DS .'ram_images ';
        $ io = Varien_Io_File () baru;
        $ result = $ io-> rmdir ($ direktori, true);
}

Buat fungsi di bawah ini di Helper Class

 updateDirSepereator fungsi publik ($ path) 
    {
        return str_replace ('\\', DS, $ path);
    }
Vinaya Maheshwari
sumber
saya akan mencoba ini, saya harap ini berhasil
HungryDB
6

Tambahkan 'enctype'’ ⇒ 'multipart/form-data'Itu akan membantu mendapatkan sesuatu $_FILES

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

Anda harus memiliki sesuatu yang terlihat seperti ini:

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

    )

);

Kemudian di /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',
));

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

Formulir edit Anda akan menampilkan gambar seperti ..

masukkan deskripsi gambar di sini

Supravat Mondal
sumber
Saya sudah mengunggah gambar. saya hanya ingin ditampilkan sebagai thumbnail pada formulir edit.
HungryDB
Kode di atas akan menampilkan gambar dalam formulir edit Anda.
Supravat Mondal
Ya, mungkin. Tapi saya menggunakan $path = Mage::getBaseDir('media') . DS .'ram_images';jalur ini untuk mengunggah gambar.
HungryDB
4

Saya pikir saya punya solusi sederhana di sini untuk menampilkan gambar mini.

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

hanya menyimpan nama folder juga di tabel dan itu berhasil.

Untuk menghapus gambar, tambahkan kode berikut ke saveAction()fungsi pengontrol modul .

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

Itu berhasil.

HungryDB
sumber
Hai @HungryDB, ini berhasil juga untuk saya, tetapi sebagian. Gambar sedang diunggah tetapi gambar mini tidak muncul di formulir, hanya tombol telusuri. Apakah saya harus menambahkan fungsi ke helper juga untuk membuatnya berfungsi?
bestwebdevs
gunakan tipe bidangimage
HungryDB
Hai @HungryDB, saya lakukan, tetapi masih hanya menampilkan tombol.
bestwebdevs