Magento 2, छवि चयनकर्ता पैरामीटर के साथ नया विजेट, तस्वीर को नहीं बचाता है


18

मैं एक नया विजेट बनाता हूं और एक पैरामीटर चित्र चयनकर्ता है, मैं इस कोड का उपयोग करता हूं । सब कुछ ठीक लग रहा है। मैं मीडिया फ़ोल्डर खोल सकता हूं और वह चित्र चुन सकता हूं जिसका मैं उपयोग करना चाहता हूं। जब मैं चित्र चुनता हूं, तो फ़ॉर्म का चित्र फ़ील्ड इस मान से भर जाता है:

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

लेकिन जब मैं प्रपत्र विजेट डेटा सहेजता हूं, तो चित्र फ़ील्ड में यह मान होता है: {{media url=

और कुछ नहीं। इसे कैसे हल किया जा सकता है?


2
समस्या कॉन्फ़िगरेशन पर थी। कॉन्फ़िगरेशन पर> सामान्य> सामग्री प्रबंधन, "कैटलॉग के लिए WYSIWYG में मीडिया सामग्री के लिए स्टेटिक URL का उपयोग करें" यह "हां" होना चाहिए
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 में कॉल करना चाहते हैं..तो bto कोड 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 () मेरे ब्लॉक में लिखा जाता है। उसके अनुसार, आपको अपनी ब्लॉक फाइल के रूप में आवेदन करना चाहिए।
मैं उम्मीद करता हूँ यह आप के लिए उपयोगी है। यदि आपके पास कोई प्रश्न है तो मुझे बताएं।


मुझे ऑब्जेक्ट मैनेजर का उपयोग करके phtml फ़ाइल में परिणाम मिला। यह एक उचित तरीका नहीं होगा, लेकिन मैं यहां अधिक कोड लिखना नहीं चाहता हूं। इसलिए मैं इसका उपयोग करता हूं। यदि आप फ़ैक्टरी विधि का उपयोग करना चाहते हैं तो यह ठीक होगा।
विष्णु सालुंके ११'१nu को

0

मैंने कोड की जाँच की है और पाया है कि निर्देशिका से छवि URL प्राप्त करने के लिए कोड शामिल नहीं है। आपको इस समस्या को हल करने के लिए इस पर काम करना होगा। छवि URL को शामिल करने का कोड गायब है।


0

लगता है कि यह Magento 2.1 में एक ज्ञात मुद्दा है। यहाँ विषय पर अधिक जानकारी के लिए उनके github का लिंक दिया गया है। https://github.com/magento/magento2/issues/6138 ऐसा लगता है कि कोशिश करने के लिए कुछ अलग फ़िक्स हो सकते हैं।



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 \ फ्रेमवर्क \ अनुप्रयोग \ कार्रवाई \ कार्रवाई {

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 में एक फ़ोल्डर में एक छवि अपलोड को कैसे बचाया जाए?

और प्रेक्षक का उपयोग करके, आप पोस्ट में छवि का मान प्राप्त कर सकते हैं। इनपुट क्षेत्र टैग में डेटा-प्रपत्र-भाग = "product_form" का उपयोग करें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.