J'ai besoin de faire une mise à jour massive des données produit, mais ce que je dois faire ne peut pas être réalisé avec l'importation de produits. Par exemple, je dois mettre à jour la galerie de médias et les catégories pour des produits donnés, mais la solution avec laquelle je suis sorti prend trop de temps.
Un petit récapitulatif: j'ai ajouté une commande à la CLI Magento 2 qui, étant donné un fichier de configuration json, supprime, ajoute, met à jour ou trie les entrées de la galerie multimédia pour un produit donné comme celui-ci. Ici, je colle un extrait du code:
/* $product is of type Magento\Catalog\Model\Product */
//get existing media gallery
$existingMediaGallery = $product->getMediaGallery();
/*
do stuff with media gallery (alter $existingMediaGallery)
(add, remove, sort, ...)
*/
//set media gallery again
$product->setMediaGallery($existingMediaGallery);
//process media gallery
$mediaGalleryEntries = $product->getMediaGalleryEntries();
$this->getMediaGalleryProcessor()->clearMediaAttribute($product, array_keys($product->getMediaAttributes()));
if ($mediaGalleryEntries) {
foreach ($mediaGalleryEntries as $k => $entry) {
if (!isset($entry['removed']) && !empty($entry['types'])) {
$this->getMediaGalleryProcessor()->setMediaAttribute($product, $entry['types'], $entry['file']);
}
}
}
//save product
$product->save();
Puisqu'il s'agit d'une mise à jour massive, la ligne «$ product-> save ()» est appelée plusieurs fois et prend toujours de 2 à 4 secondes. Étant donné que je dois lancer le code de milliers de produits, j'ai besoin d'un moyen plus rapide de le faire.
J'ai essayé avec
$product->getResource()->saveAttribute($product, 'media_gallery');
et
$product->addAttributeUpdate('media_gallery', $mediaGallery, $storeId);
mais cela ne fonctionne pas pour la galerie multimédia (ne fonctionne que pour eav je pense).
Existe-t-il un moyen de sauvegarder uniquement la galerie multimédia et de conserver ces modifications plus rapidement?
(Ce que je recherche est quelque chose comme une Magento\Catalog\Api\CategoryLinkManagementInterface::assignProductToCategories
méthode qui enregistre l'association catégorie / produit plus rapidement qu'une sauvegarde complète du produit)