Devo fare un aggiornamento massiccio dei dati del prodotto, ma ciò che devo fare non può essere raggiunto con l'importazione del prodotto. Ad esempio, devo aggiornare la galleria multimediale e le categorie per determinati prodotti, ma la soluzione con cui sono uscito richiede troppo tempo.
Un piccolo riassunto: ho aggiunto un comando alla CLI di Magento 2 che, dato un file di configurazione json, rimuove, aggiunge, aggiorna o ordina le voci della galleria multimediale per un determinato prodotto come questo. Qui incollo un estratto del codice:
/* $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();
Poiché si tratta di un aggiornamento massiccio, la riga "$ product-> save ()" viene chiamata molte volte e richiede sempre da 2 a 4 secondi. Dato che devo lanciare il codice per migliaia di prodotti, ho bisogno di un modo più rapido per farlo.
Ci ho provato
$product->getResource()->saveAttribute($product, 'media_gallery');
e
$product->addAttributeUpdate('media_gallery', $mediaGallery, $storeId);
ma questo non funziona per la galleria multimediale (funziona solo per eav credo).
C'è un modo per salvare solo la galleria multimediale e persistere più rapidamente queste modifiche?
(Quello che cerco è qualcosa di simile al Magento\Catalog\Api\CategoryLinkManagementInterface::assignProductToCategories
metodo che salva l'associazione categoria / prodotto più velocemente di un salvataggio completo del prodotto)