Chcę przesłać zdjęcia do istniejących produktów. Obrazy są w import_dir
. I należy je dodać do produktu, który już istnieje w katalogu.
Mogłem znaleźć tylko 2 sposoby, jak to zrobić.
1. Sposób „złej praktyki” - przy użyciu modelu produktu\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
Kod
/* 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. Sposób „dobrej praktyki” - korzystanie z 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
Kod
$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);
Obawy:
- W 1 otrzymuję błąd, który jest znanym problemem
Niezdefiniowany indeks: typ_media
- W 2 jest zbyt skomplikowane i powinno być łatwiejsze
Pytania:
- Czy istnieje metoda „najlepszych praktyk” do zarządzania (dodawania, usuwania, zastępowania) obrazami produktów?
- Być może istnieje sposób z \ Magento \ CatalogImportExport \ Model \ Import \ Product
magento2
product-images
image-upload
Olga Zhe
źródło
źródło
$entry->setMediaType('image');
linii nie jestem do końca pewien, bo o ile pamiętam, spowodowało to błąd coś takiego, że potrzebuje typu „png” lub „jpg” (więc na końcu powinno to być „image / png”). Ale znowu nie jestem pewienpo spojrzeniu na te same rzeczy, co Ty najwyraźniej jestem w tym samym miejscu i nie mogę znaleźć lepszego sposobu niż ten 2. I te 2 są bardzo ograniczone. W testach funkcjonalnych używają prostej rzeczy product-> save (), która powoduje inne problemy (dla mnie osobiście url_key już istnieje błąd). Wydaje się, że można zastosować tylko drugą metodę, jakkolwiek skomplikowana i myląca. Ale zastanawiam się, czy w drugiej metodzie znalazłeś sposób, aby ustawić przesłane obrazy jako miniaturę lub mały obraz?
źródło