既存の製品に画像をアップロードしたい。画像はにあり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.「グッドプラクティス」の方法-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
- In 2は非常に複雑であり、より簡単な方法でなければなりません
質問:
- 製品の画像を管理(追加、削除、交換)する「ベストプラクティス」の方法はありますか?
- \ Magento \ CatalogImportExport \ Model \ Import \ Productを使用する方法があるかもしれません
$entry->setMediaType('image');
行についてはよくわかりませんが、タイプ「png」または「jpg」が必要なようなエラーが発生したことを覚えている限りです(したがって、最終的には「image / png」になるはずです)。しかし、再び、私はわからない