আমি বিদ্যমান পণ্যগুলিতে ছবি আপলোড করতে চাই। ছবিতে আছে 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 আমি একটি ত্রুটি, যা পেয়ে করছি জ্ঞাত সমস্যা
অপরিজ্ঞাত সূচক: মিডিয়া_প্রকার
- 2 ইন উপায় খুব জটিল এবং এটি সহজ উপায় হওয়া উচিত
প্রশ্নাবলী:
- পণ্যের চিত্রগুলি পরিচালনা (যুক্ত, অপসারণ, প্রতিস্থাপন) করার জন্য কি "সেরা অনুশীলন" আছে?
- \ ম্যাজেন্টো \ ক্যাটালগ আমদানি এক্সপোর্ট \ মডেল \ আমদানি \ পণ্য সহ একটি উপায় রয়েছে
$entry->setMediaType('image');
লাইনটি সম্পর্কে আমি পুরোপুরি নিশ্চিত নই, যতক্ষণ না আমার মনে আছে এটি আমার ত্রুটির কারণ হতে পারে যে এটির জন্য একটি "পিএনজি" বা "জেপিজি" টাইপ দরকার (সুতরাং শেষ পর্যন্ত এটি "চিত্র / পিএনজি" হওয়া উচিত)। তবে আবার, আমি নিশ্চিত নই