Magento 2 में इस तरह एक एकल छवि अपलोडर दिख रहा है:
यह AJAX का उपयोग करके छवि को अपलोड करता है और अपलोड की गई छवि जानकारी वाले सीरियल को JSON लौटाएगा। वहाँ दृश्यपटल phtml फ़ाइल में इस कार्यक्षमता को फिर से बनाने का एक तरीका है?
Magento 2 में इस तरह एक एकल छवि अपलोडर दिख रहा है:
यह AJAX का उपयोग करके छवि को अपलोड करता है और अपलोड की गई छवि जानकारी वाले सीरियल को JSON लौटाएगा। वहाँ दृश्यपटल phtml फ़ाइल में इस कार्यक्षमता को फिर से बनाने का एक तरीका है?
जवाबों:
फ्रंट-एंड इमेज अपलोडिंग के लिए आप एक कस्टम एक्सटेंशन बना सकते हैं (कस्टम एक्सटेंशन नाम "Vendor_MyModule" है)।
मुझे लगता है कि आपने पहले ही कस्टम एक्सटेंशन "Vendor_MyModule" बना लिया था। इसलिए मैं यहाँ केवल इमेज अपलोडिंग ऑपरेशन से संबंधित आवश्यक फाइलों का वर्णन कर रहा हूँ।
कृपया नीचे दिए गए चरणों का पालन करें।
चरण 1: अपलोडर मॉडल फ़ाइल बनाएँ। एप्लिकेशन / कोड / विक्रेता / MyMocule / मॉडल / अपलोड / ImageFileUploader.php
फ़ाइल: ImageFileUploader.php
<?php
namespace Vendor\MyModule\Model\Upload;
use Magento\Framework\Exception\LocalizedException;
use Magento\Framework\Filesystem;
use Magento\MediaStorage\Model\File\UploaderFactory;
use Magento\Framework\App\Filesystem\DirectoryList;
use Magento\Framework\UrlInterface;
use Magento\Store\Model\StoreManagerInterface;
/**
* Class ImageFileUploader
* @package Aheadworks\Rbslider\Model\Slide
*/
class ImageFileUploader
{
/**
* @var UploaderFactory
*/
private $uploaderFactory;
/**
* @var Filesystem
*/
private $filesystem;
/**
* @var StoreManagerInterface
*/
private $storeManager;
/**
* @var string
*/
const FILE_DIR = 'vendor_mymodule/uplaods';
/**
* @param UploaderFactory $uploaderFactory
* @param Filesystem $filesystem
* @param StoreManagerInterface $storeManager
*/
public function __construct(
UploaderFactory $uploaderFactory,
Filesystem $filesystem,
StoreManagerInterface $storeManager
) {
$this->uploaderFactory = $uploaderFactory;
$this->storeManager = $storeManager;
$this->filesystem = $filesystem;
}
/**
* Save file to temp media directory
*
* @param string $fileId
* @return array
* @throws LocalizedException
*/
public function saveImageToMediaFolder($fileId)
{
try {
$result = ['file' => '', 'size' => ''];
/** @var \Magento\Framework\Filesystem\Directory\Read $mediaDirectory */
$mediaDirectory = $this->filesystem
->getDirectoryRead(DirectoryList::MEDIA)
->getAbsolutePath(self::FILE_DIR);
/** @var \Magento\MediaStorage\Model\File\Uploader $uploader */
$uploader = $this->uploaderFactory->create(['fileId' => $fileId]);
$uploader->setAllowRenameFiles(true);
$uploader->setFilesDispersion(false);
$uploader->setAllowedExtensions($this->getAllowedExtensions());
$result = array_intersect_key($uploader->save($mediaDirectory), $result);
$result['url'] = $this->getMediaUrl($result['file']);
} catch (\Exception $e) {
$result = ['error' => $e->getMessage(), 'errorcode' => $e->getCode()];
}
return $result;
}
/**
* Get file url
*
* @param string $file
* @return string
*/
public function getMediaUrl($file)
{
$file = ltrim(str_replace('\\', '/', $file), '/');
return $this->storeManager
->getStore()
->getBaseUrl(UrlInterface::URL_TYPE_MEDIA) . self::FILE_DIR . '/' . $file;
}
/**
* Get allowed file extensions
*
* @return string[]
*/
public function getAllowedExtensions()
{
return ['jpg', 'jpeg', 'gif', 'png'];
}
}
चरण 2: सेटप 1 में बनाए गए मॉडल का उपयोग करके छवि अपलोड करने के लिए नियंत्रक बनाएं
/app/code/Vendor/MyModule/Controller/Index/UploadImage.php
फ़ाइल: UploadImage.php
namespace Vendor\MyModule\Controller\Index;
use Magento\Framework\App\Action\Action;
use Magento\Framework\App\Action\Context;
use Magento\Framework\Controller\ResultFactory;
use Vendor\MyModule\Model\Upload\ImageFileUploader;
class UploadImage extends \Magento\Framework\App\Action\Action
{
/**
* @var ImageFileUploader
*/
private $imageFileUploader;
/**
* @var \Magento\Store\Model\StoreManagerInterface
*/
protected $storeManager;
/**
* @param Context $context
* @param ImageFileUploader $imageFileUploader
*/
public function __construct(
Context $context,
\Magento\Store\Model\StoreManagerInterface $storeManager,
ImageFileUploader $imageFileUploader
) {
$this->storeManager = $storeManager;
$this->imageFileUploader = $imageFileUploader;
parent::__construct($context);
}
/**
* Image upload action
*
* @return \Magento\Framework\Controller\ResultInterface
*/
public function execute()
{
$result = $this->imageFileUploader->saveImageToMediaFolder('myimgaeupload');
return $this->resultFactory->create(ResultFactory::TYPE_JSON)->setData($result);
}
}
चरण 3: लेआउट ऐप / कोड / विक्रेता / म्यूमोडुले / नियंत्रक / सूचकांक / सूचकांक लोड करने के लिए एक और नियंत्रक बनाएँ।
फ़ाइल: Index.php
namespace Vendor\MyModule\Controller\Index;
class Index extends \Magento\Framework\App\Action\Action
{
protected $_pageFactory;
public function __construct(
\Magento\Framework\App\Action\Context $context,
\Magento\Framework\View\Result\PageFactory $pageFactory)
{
$this->_pageFactory = $pageFactory;
return parent::__construct($context);
}
public function execute()
{
$resultPage = $this->_pageFactory->create();
return $resultPage;
}
}
चरण 4: अपने फॉन्ट-एंड कंट्रोलर के लिए राउटर को डिक्लेयर करें। एप्लिकेशन / कोड / विक्रेता / MyModule / etc / दृश्यपटल / routes.xml
फ़ाइल: path.xml
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:App/etc/routes.xsd">
<router id="standard">
<route id="*myupload*" frontName="*myupload*">
<module name="Vendor_MyModule" />
</route>
</router>
</config>
चरण 5: घोषणा लेआउट। xml /app/code/Vendor/MyModule//view/frontend/layout/myupload_index_index.xml
फ़ाइल: myupload_index_index.xml
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="1column" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
<body>
<referenceContainer name="content">
<block class="Vendor\MyModule\Block\Myblock" name="myupload_index_index" template="Vendor_MyModule::form.phtml" />
</referenceContainer>
</body>
</page>
चरण 6: ब्लॉक क्लास फ़ाइल बनाएँ /app/code/Vendor/MyModule/Block/Myblock.pp
फ़ाइल: Myblock.php
<?php
namespace Vendor\MyModule\Block;
class Myblock extends \Magento\Framework\View\Element\Template
{
}
चरण 7: phtml फ़ाइल बनाएँ
/app/code/Vendor/MyModule/view/frontend/templates/form.phtml
फ़ाइल: form.phtml
<h2>Welcome to Ny Image Uploader</h2>
<div class="upload-wrapper" data-bind="scope: 'uploader'">
<!-- ko template: getTemplate() --><!-- /ko -->
</div>
<script type="text/x-magento-init">
{
".upload-wrapper": {
"Magento_Ui/js/core/app": {
"components": {
"uploader": {
"component":"Magento_Ui/js/form/element/file-uploader",
"template": "ui/form/element/uploader/uploader",
"previewTmpl":"Vendor_MyModule/checkout-image-preview",
"dataScope" : "myimgaeupload",
"uploaderConfig": {
"url": "<?php echo $block->getUrl('myupload/index/uploadimage'); ?>"
}
}
}
}
}
}
</script>
चरण 8: छवि पूर्वावलोकन ऐप / कोड / विक्रेता / MyModule / दृश्य / दृश्य / वेब / टेम्पलेट / छवि-पूर्वावलोकन.html के लिए KO टेम्पलेट फ़ाइल बनाएं
फ़ाइल: पूर्वावलोकन। Html
<div class="file-uploader-summary">
<div class="file-uploader-preview">
<a attr="href: $parent.getFilePreview($file)" target="_blank">
<img
class="preview-image"
tabindex="0"
event="load: $parent.onPreviewLoad.bind($parent)"
attr="
src: $parent.getFilePreview($file),
alt: $file.name">
</a>
<div class="actions">
<button
type="button"
class="action-remove"
data-role="delete-button"
attr="title: $t('Delete image')"
click="$parent.removeFile.bind($parent, $file)">
<span translate="'Delete image'"/>
</button>
</div>
</div>
<div class="file-uploader-filename" text="$file.name"/>
<div class="file-uploader-meta">
<text args="$file.previewWidth"/>x<text args="$file.previewHeight"/>
</div>
</div>
चरण 9) CLI कमांड के बाद चलाएँ
sudo php bin/magento setup:di:compile
sudo rm -rf pub/static/frontend/*
sydo php bin/magento cache:flush