Magento 2, новий віджет із параметром вибору зображення, не зберігає зображення


18

Я створюю новий віджет, і один з параметрів - це вибір зображення, я просто використовую цей код. Все виглядає добре. Я можу відкрити папку мультимедіа та вибрати зображення, яке я хочу використовувати. Коли я вибираю зображення, поле зображення у формі заповнюється цим значенням:

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

Але коли я зберігаю дані віджетів форми, поле зображення має таке значення: {{media url=

нічого більше. Як я можу це вирішити?


2
Проблема була в конфігурації. У розділі Конфігурація> Загальне> Управління вмістом, "Використовуйте статичні URL-адреси для медіа-вмісту в WYSIWYG для каталогу" Це повинно бути "так"
mvistas

1
Проблема з цим підходом полягає в тому, що ви зіткнетеся з проблемами переходу від однієї програми до іншої, оскільки жорстко закодоване зображення не працюватиме
open-ecommerce.org

Відповіді:


1

Якщо ви хочете завантажити зображення, то чому б не скористатися кнопкою вибору зображення?
Якщо вам подобається редактор, то використовуйте його. Але це не правильний спосіб завантаження зображення за допомогою редактора. Ви можете скористатися кнопкою. Якщо ви не знаєте, як це зробити. Дозволь пояснити.

Ось мій код. Код нижче написаний у файлі блоку, який створює кнопку.

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

Зображення - це ім'я поля бази даних. У вашому випадку це редактор wysiwyg. Я не знаю точного, але одного разу перевіряйте у своїй базі даних.

Наведений нижче код використовується для збереження зображення у вашій таблиці. Тепер додайте цей код у свій контролер.

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

}

Після цього ви хочете викликати його в phtml для отримання результату. Тому нижче введіть код у файл phtml.
Ось код.

    $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 () пише в моєму block.so відповідно до цього, ви повинні застосувати як файл блоку.
Сподіваюся, це вам корисно. Якщо у вас є запитання, дайте мені знати.


Я викликав результат у файлі phtml за допомогою object manager.it не буде належним чином, але я не хочу писати тут більше коду. Тому я використовую його. Якщо ви хочете використовувати заводський метод, тоді він буде добре.
Vishnu Salunke

0

Я перевірив код і виявив, що код для отримання URL-адреси зображення з каталогу не включений. Ви повинні працювати над цим, щоб вирішити цю проблему. Код для включення URL-адреси зображення відсутній.




0

За допомогою jquery ми можемо зберегти зображення у папці.

У сценарії напишіть цей код

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

Потім у вашому користувальницькому контролері:

Завантаження класу поширюється \ Magento \ Framework \ Додаток \ Дія \ Дія {

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

}

зверніться, будь ласка, Як зберегти завантаження зображення у папку в magento2?

А за допомогою спостерігача ви можете отримати значення зображення в публікації. У полі введення тег використовуйте data-form-part = "product_form".

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.