기존 제품에 이미지를 업로드하고 싶습니다. 이미지는입니다 import_dir
. 그리고 카탈로그에 이미 존재하는 제품에 추가해야합니다.
나는 그것을하는 두 가지 방법 만 찾을 수 있습니다.
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. "모범 사례"방식-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
암호
$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
- 에서 이 너무 복잡하고 그것은 쉬운 방법이어야한다
질문 :
- 제품 이미지를 관리 (추가, 제거, 교체)하는 "모범 사례"방법이 있습니까?
- 어쩌면있는 방법이 \ 젠토 \ CatalogImportExport \ 모델 \ 가져 오기 \ 제품
$entry->setMediaType('image');
줄에 대해 잘 모르겠습니다. 내가 기억하는 한 "png"또는 "jpg"유형과 같은 오류가 발생했습니다. 결국 "image / png"여야합니다. 그러나 다시, 나는 확실하지 않다