Magento 2, görüntü seçici parametresine sahip yeni widget, resmi kaydetmiyor


18

Ben yeni bir widget oluşturmak ve parametrelerden biri bir resim seçici, ben sadece bu kodu kullanın . Her şey iyi görünüyor. Medya klasörünü açabilir ve kullanmak istediğim resmi seçebilirim. Resmi seçtiğimde, formdaki resim alanı bu değerle doldurulur:

http://local.magento.com/admin/cms/wysiwyg/directive/___directive/e3ttZWRpYSB1cmw9Ind5c2l3eWcvcHVycGxlLmpwZyJ9fQ,,/key/4c150d984998702b74709bb8f05820aff2f85a968d47e50f9638b7d2a7b1ced3/

Ancak form widget'ı verilerini kaydettiğimde, resim alanı şu değere sahiptir: {{media url=

başka bir şey değil. Bunu Nasıl Çözebilirim?


2
Sorun yapılandırmada oldu. Yapılandırma> Genel> İçerik Yönetimi'nde, "Katalog için
WYSIWYG'deki

1
bu yaklaşımla ilgili sorun, sabit kodlu görüntü çalışmadığından bir
env'den

Yanıtlar:


1

Bir resim yüklemek istiyorsanız, neden görüntü seçim düğmesini kullanmıyorsunuz?
Editörden hoşlanıyorsanız kullanın, ancak bir editör kullanarak görüntü yüklemek için uygun bir yol değildir. Nasıl yapacağınızı bilmiyorsanız. Açıklamama izin ver.

İşte kodum. Aşağıdaki kod, bir düğme oluşturan blok dosyasında yazılmıştır.

$fieldset->addField(
        'image',
        'file',
        [
            'name' => 'image',
            'label' => __('Image'),
            'title' => __('Image'),
        ]
    );

Resim, veritabanı alanı adıdır. Senin durumunda wysiwyg editörü.Ben kesin bilmiyorum ama bir kez veritabanınızı kontrol edin.

Aşağıdaki kod, görüntüyü tablonuza kaydetmek için kullanılır. Şimdi bu kodu Kontrolörünüze koyun.

<?php
namespace Vendor\Module\Controller\Adminhtml\Slider;

use Magento\Framework\App\Filesystem\DirectoryList;

class Save extends \Magento\Backend\App\Action

{

protected $_mediaDirectory;
protected $_fileUploaderFactory;

public function __construct(
    \Magento\Backend\App\Action\Context $context,        
    \Magento\Framework\Filesystem $filesystem,
    \Magento\MediaStorage\Model\File\UploaderFactory $fileUploaderFactory
) 
{
    $this->_mediaDirectory = $filesystem->getDirectoryWrite(\Magento\Framework\App\Filesystem\DirectoryList::MEDIA);
    $this->_fileUploaderFactory = $fileUploaderFactory;
    parent::__construct($context);
}

public function execute()
{
    /*For Image Upload*/

    /** @var \Magento\Framework\Controller\Result\Redirect $resultRedirect */
    $resultRedirect = $this->resultRedirectFactory->create();

    try{
        $target = $this->_mediaDirectory->getAbsolutePath('imagefolder/');

        $targetOne = "imagefolder/";
        /** @var $uploader \Magento\MediaStorage\Model\File\Uploader */
        $uploader = $this->_fileUploaderFactory->create(['fileId' => 'image']);
        /** Allowed extension types */
        $uploader->setAllowedExtensions(['jpg', 'jpeg', 'gif', 'png', 'zip', 'doc']);
        /** rename file name if already exists */
        $uploader->setAllowRenameFiles(true);
        /** upload file in folder "mycustomfolder" */
        $result = $uploader->save($target);
        /*If file found then display message*/
        if ($result['file']) 
        {
            $this->messageManager->addSuccess(__('File has been successfully uploaded')); 
        }
    }
    catch (Exception $e) 
    {
        $this->messageManager->addError($e->getMessage());
    }
    /*For Image Upload Finished*/ 

    $data = $this->getRequest()->getPostValue();

    $data['image'] = $targetOne.$result['file'];

    if (!$data) {
        $this->_redirect('*/*/filenaem');
        return;
    }
    try {

        $rowData = $this->_objectManager->create('Vendor\Module\Model\Slider');

        $rowData->setData($data);

        if (isset($data['id'])) 
        {
            $rowData->setEntityId($data['id']);
        }
        $rowData->save();
        $this->messageManager->addSuccess(__('Row data has been successfully saved.'));
    } 
    catch (Exception $e) 
    {
        $this->messageManager->addError(__($e->getMessage()));
    }
    $this->_redirect('*/*/index');

    return $this->resultRedirectFactory->create()->setPath(
        '*/*/upload', ['_secure'=>$this->getRequest()->isSecure()]
    );
}

/**
 * Check Category Map permission.
 *
 * @return bool
 */
protected function _isAllowed()
{
    return $this->_authorization->isAllowed('Vendor_Module::Module_list');
}

}

Bundan sonra sonuç için phtml olarak adlandırmak istersiniz .. böylece feryat kodu phtml dosyasına yazın.
İşte kod.

    $collection = $block->getCollectionFor();
    $_objectManager = \Magento\Framework\App\ObjectManager::getInstance(); //instance of\Magento\Framework\App\ObjectManager
    $storeManager = $_objectManager->get('Magento\Store\Model\StoreManagerInterface'); 
    $currentStore = $storeManager->getStore();
//Base URL for saving image into database.
    $mediaUrl = $currentStore->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_MEDIA);

getCollectionFor () benim block.so'ya yazıyor, buna göre blok dosyanız olarak başvurmalısınız.
Umarım bu sana yardımcı olur. Herhangi bir sorunuz varsa bana bildirin.


Nesne manager.it kullanarak phtml dosyasında bir sonuç çağırdı uygun bir yol olmaz ama burada daha fazla kod yazmak istemiyorum. Bu yüzden kullanıyorum. Fabrika yöntemini kullanmak istiyorsanız o zaman iyi olacak.
Vishnu Salunke

0

Kodu kontrol ettim ve resim URL'sini dizinden almak için kodun dahil olmadığını buldum. Bu sorunu çözmek için üzerinde çalışmalısınız. Resim URL'sini içerecek kod eksik.




0

Jquery kullanarak görüntüyü bir klasöre kaydedebiliriz.

Komut dosyasına bu kodu yazın

<script>
    function file_up(id)
    {
        var up_id = 'uploadfiles'+id;
        var upremv_id = 'upload'+id;
        var files = document.getElementById(up_id).files;
        for (var i = 0; i < files.length; i++)
        {
            uploadFile(files[i],up_id,upremv_id);
        }
    }
    function uploadFile(file,up_id,upremv_id){
        var url = "<?php echo $baseurl ?>helloworld/index/upload";
        var xhr = new XMLHttpRequest();
        var fd = new FormData();
        xhr.open("POST", url, true);
        xhr.onreadystatechange = function() {
            if (xhr.readyState == 4 && xhr.status == 200) {
                jQuery('#imgna'+up_id).val(xhr.responseText);
                console.log(xhr.responseText); // handle response.
                jQuery('#'+up_id).remove();
                jQuery('#'+upremv_id).remove();
                var img_va = '<img class="image" src="<?php echo $mediaUrl.'custom/'?>'+xhr.responseText+'">';
                jQuery('#pre'+up_id).html(img_va);
            }
        };
        fd.append('uploaded_file', file);

</script>

Ardından, özel denetleyicinizde:

Sınıf Yüklemesi \ Magento \ Framework \ App \ Action \ Action {

public function __construct(\Magento\Framework\App\Action\Context $context)
{
    parent::__construct($context);
}

public function execute()
{
    $objectManager = \Magento\Framework\App\ObjectManager::getInstance();

    $fileSystem = $objectManager->create('\Magento\Framework\Filesystem');
    $mediaPath = $fileSystem->getDirectoryRead(\Magento\Framework\App\Filesystem\DirectoryList::MEDIA)->getAbsolutePath();
    $media = $mediaPath . 'custom/';

    //  exit;


    $file_name = rand() . $_FILES['uploaded_file']['name'];
    $file_size = $_FILES['uploaded_file']['size'];
    $file_tmp = $_FILES['uploaded_file']['tmp_name'];
    $file_type = $_FILES['uploaded_file']['type'];

    if (move_uploaded_file($file_tmp, $media . $file_name)) {
        echo $file_name;
    } else {
        echo "File was not uploaded";
    }
}

}

Lütfen bkz. Resim yüklemesini magento2 içindeki bir klasöre nasıl kaydedebilirim?

Gözlemci kullanarak görüntünün değerini yazıya alabilirsiniz .. Girdi alanı etiketinde data-form-part = "product_form" kullanın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.