カスタムモジュール管理フォームでサムネイル画像を表示し、画像を削除する


8

このようにカスタム管理モジュールの編集フォームにサムネイル画像を表示しようとしています。ここに画像の説明を入力してください 今、これ を使用していaddfieldます。

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

私はそこを見てlib/Varien/Data/Form/Element/Image.php、画像のURLを使用するこのコードを見つけました。

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

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

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

しかし、私はこのモジュールのメディアフォルダーに画像を保存していません。コントローラーのram_imagesフォルダー内の画像をアップロードしています。

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

また、Image.php他のシステムモジュールに影響を与えるため、ファイルからURLを変更できませんでした。ここに回避策はありますか?解決策を提案してください。

また、アップロードボタンの下にあるチェックボックスを使用して画像を削除します。

ありがとう。

回答:


9

コントローラファイルにコードを追加する

パブリック関数saveAction() 
{
    ...

    if(!empty($ _FILES ['main_image'] ['name'])) 
    {
        $ data ['main_image'] = $ _FILES ['main_image'] ['name'];
    } 
    そうしないと 
    {
        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'] = '';
        }
        そうしないと 
        {
            unset($ data ['main_image']);
        }
    }

    ...
}
パブリック関数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);
}

Helperクラスで以下の関数を作成します

 パブリック関数updateDirSepereator($ path) 
    {
        str_replace( '\\'、DS、$ path);を返します。
    }

私はこれを試すつもりです、
うまくいくと思い

6

追加 'enctype'’ ⇒ 'multipart/form-data'それは何かを得るために役立つはずです $_FILES

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

次のようなものが必要です。

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

    )

);

次に、/ 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',
));

次に、/ app / code / local / Chilly / ModName / controllers / Adminhtml / ModuleNameController.phpで 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) { }
       }

あなたの編集フォームは次のような表示画像になります。

ここに画像の説明を入力してください


すでに画像をアップロードしています。編集フォームにサムネイルとして表示したいだけです。
HungryDB 14

上記のコードは、編集フォームの表示イメージになります。
Supravat Mondal 2014

ええ、おそらく。しかし、私は$path = Mage::getBaseDir('media') . DS .'ram_images';このパスを使用して画像をアップロードしています。
HungryDB 14

4

私はここにサムネイル画像を表示する簡単な解決策を得たと思います。

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

フォルダ名もテーブルに保存しただけで機能しました。

次のコードをモジュールコントローラー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) 
     {
         $data['main_image']='';
     }
     else 
     { 
         unset($data['main_iamge']);
      }
 }

動いた。


こんにちは@HungryDB、これは私にとってもうまくいきましたが、部分的にはうまくいきました。画像はアップロードされていますが、サムネイルはフォームに表示されず、参照ボタンのみが表示されます。ヘルパーに機能を追加する必要がありますか?
bestwebdevs 2017年

フィールドタイプを使用image
HungryDB '29年

こんにちは、@ HungryDBですが、まだボタンしか表示されていません。
bestwebdevs 2017年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.