Je souhaite télécharger des images vers les produits existants. Les images sont là import_dir
. Et ils doivent être ajoutés au produit qui existe déjà dans le catalogue.
Je n'ai pu trouver que 2 façons de le faire.
1. Manière de "mauvaise pratique" - en utilisant le modèle de produit\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
Code
/* 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. Méthode "bonne pratique" - utilisation de l'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
Code
$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);
Préoccupations:
- Dans 1, je reçois une erreur, qui est un problème connu
Index non défini: media_type
- En 2, c'est trop compliqué et ça devrait être le moyen le plus simple
Des questions:
- Existe-t-il un moyen de "meilleure pratique" pour gérer (ajouter, supprimer, remplacer) les images du produit?
- Peut-être existe-t-il un moyen avec \ Magento \ CatalogImportExport \ Model \ Import \ Product
magento2
product-images
image-upload
Olga Zhe
la source
la source
$entry->setMediaType('image');
ligne, je ne suis pas sûr, pour autant que je m'en souvienne, cela m'a causé une erreur quelque chose comme ça, il faut un type "png" ou "jpg" (donc à la fin ce devrait être "image / png"). Mais encore une fois, je ne suis pas sûraprès avoir regardé les mêmes choses que vous, apparemment, je suis exactement au même endroit, et je ne peux pas trouver de meilleur moyen que ce 2. Et ces 2 sont très limités. Dans les tests fonctionnels, ils utilisent un simple produit-> save () qui provoque d'autres problèmes (pour moi personnellement, url_key existe déjà une erreur). Il semble que seule la 2ème méthode puisse être utilisée, aussi compliquée et déroutante que cela puisse paraître. Mais je me demande si dans la 2e méthode, vous avez trouvé un moyen de définir les images téléchargées comme vignette ou petite image?
la source