Я хочу загрузить изображения в существующие продукты. Изображения в 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
- Во 2 это слишком сложно, и это должно быть проще
Вопросов:
- Существует ли «лучший метод» для управления (добавления, удаления, замены) изображений продукта?
- Возможно есть способ с \ Magento \ CatalogImportExport \ Model \ Import \ Product
magento2
product-images
image-upload
Ольга Же
источник
источник
$entry->setMediaType('image');
строки я не совсем уверен, потому что, насколько я помню, это вызвало у меня ошибку, примерно такую, что ей нужен тип "png" или "jpg" (так что в конце это должно быть "image / png"). Но опять же, я не уверенпосле того, как я посмотрел на те же вещи, что и вы, я, очевидно, нахожусь в одном и том же месте и не могу найти лучшего способа, чем этот 2. И эти два крайне ограничены. В функциональных тестах они используют простую вещь product-> save (), которая вызывает другие проблемы (лично для меня url_key уже существует с ошибкой). Похоже, можно использовать только второй метод, каким бы сложным и запутанным он ни казался. Но мне интересно, если во втором методе вы нашли способ установить загруженные изображения в виде миниатюр или маленьких изображений?
источник