Tôi muốn tải hình ảnh lên các sản phẩm hiện có. Những hình ảnh được trong import_dir
. Và chúng cần được thêm vào sản phẩm đã tồn tại trong danh mục.
Tôi chỉ có thể tìm thấy 2 cách để làm điều đó.
1. Cách "thực hành xấu" - sử dụng mô hình sản phẩm\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
Mã
/* 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. Cách "thực hành tốt" - sử dụng API \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
Mã
$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);
Mối quan tâm:
- Trong 1 tôi đang gặp lỗi, đây là sự cố đã biết
Chỉ mục không xác định: media_type
- Trong 2 là cách quá phức tạp và nó sẽ là cách dễ dàng hơn
Câu hỏi:
- Có cách "thực hành tốt nhất" để quản lý (thêm, xóa, thay thế) hình ảnh của sản phẩm không?
- Có lẽ có một cách với \ Magento \ CatalogImportExport \ Model \ Import \ Product
$entry->setMediaType('image');
dòng này tôi không chắc lắm, vì theo như tôi nhớ thì nó gây ra lỗi cho tôi một cái gì đó giống như nó cần một loại "png" hoặc "jpg" (vì vậy cuối cùng nó phải là "image / png"). Nhưng một lần nữa, tôi không chắc chắn