मैं मौजूदा उत्पादों के लिए चित्र अपलोड करना चाहता हूं। छवियों में हैं import_dir
। और उन्हें उस उत्पाद में जोड़ा जाना चाहिए जो पहले से ही कैटलॉग में मौजूद है।
मैं इसे करने के लिए केवल 2 तरीके खोज सकता हूं।
1. "खराब अभ्यास" तरीका - उत्पाद मॉडल का उपयोग करना\Magento\Catalog\Model\Product::addImageToMediaGallery
1. Copy the images from `import_dir` to `pub/media/tmp`
2. Add the images to the product
3. Save product
कोड
/* copy files from import_dir to pub/media/tmp */
/** @var \Magento\Catalog\Api\Data\ProductInterface $product */
/* Init media gallery */
$mediaGalleryEntries = $product->getMediaGalleryEntries();
if (empty($mediaGalleryEntries) === true){
$product->setMediaGalleryEntries([]);
}
/* Add an image to the product's gallery */
$product->addImageToMediaGallery(
$filePathFromTmpDir,
[
"image",
"small_image",
"thumbnail",
"swatch_image"
],
$moveImage,
$disableImage
);
/* Save */
$this->_productRepository->save($product);
2. "अच्छा अभ्यास" तरीका - एपीआई का उपयोग करना \Magento\Catalog\Api\ProductAttributeMediaGalleryManagementInterface::create
1. Create image content object via **\Magento\Framework\Api\Data\ImageContentInterfaceFactory**
2. Create image object via **\Magento\Catalog\Api\Data\ProductAttributeMediaGalleryEntryInterfaceFactory**
3. Create an image via API
कोड
$imageContent = $this->_imageContentInterfaceFactory->create()
->setBase64EncodedData(base64_encode(file_get_contents($filePathImportDir)))
->setType($this->_mime->getMimeType($filePathImportDir))
->setName($file_name);
$newImage = $this->_productAttributeMediaGalleryEntryInterfaceFactory->create()
->setMediaType(\Magento\Catalog\Model\Product\Attribute\Backend\Media\ImageEntryConverter::MEDIA_TYPE_CODE)
->setFile($filePathImportDir)
->setDisabled($disableImage)
->setContent($imageContent)
->setLabel('label');
$this->_productAttributeMediaGalleryManagement->create($product->getSku(), $newImage);
चिंताओं:
- में 1 मैं एक त्रुटि है, जो हो रही है ज्ञात समस्या
अनिर्धारित सूचकांक: media_type
- में 2 बहुत जटिल है और यह आसान तरीका होना चाहिए
प्रशन:
- क्या उत्पाद के चित्रों को प्रबंधित करने (जोड़ने, हटाने, बदलने) का "सर्वोत्तम अभ्यास" है?
- हो सकता है कि वहाँ एक तरीका है \ Magento \ CatalogImportExport \ Model \ Import \ उत्पाद के साथ
$entry->setMediaType('image');
लाइन के बारे में मुझे बिल्कुल यकीन नहीं है, क्यूज जहाँ तक मुझे याद है कि यह मुझे एक त्रुटि का कारण बना, जैसे कि इसे "png" या "jpg" की आवश्यकता है (इसलिए अंत में इसे "image / png" होना चाहिए)। लेकिन फिर से, मुझे यकीन नहीं है