Ich habe ein benutzerdefiniertes Magento-Modul implementiert, das Daten von externen Diensten durchläuft und Preis, Gewicht, Name und einige andere Produktattribute in Magento mehrsprachig aktualisiert , Multi-Store-Website.So verhindern Sie, dass Magento Attributwerte von einer anderen Website/einem anderen Speicher überschreibt, während Sie Produkte programmatisch aktualisieren
Meine Lösung ist recht einfach (in meinem Modell von Cron jeden Tag aufgerufen), wie folgt:
/* THIS IS CODE SNIPPET INSIDE FOREACH LOOP */
$storeId = (string)$jobConfig->store; //cron for each store
Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);
$extistingProduct = Mage::getModel('catalog/product')->loadByAttribute('sku', $sku);
$extistingProduct->setPrice($newPrice); //update price
//some code here dealing with Associated products of Configurable product probably not relevant
//...
$extistingProduct->setCanSaveConfigurableAttributes(true);
$extistingProduct->setCanSaveCustomOptions(true);
$extistingProduct->setConfigurableAttributesData($configurableAttributesData);
// This tells Magento to associate the given simple products to this configurable product..
$extistingProduct->setConfigurableProductsData($configurableProductsData);
$extistingProduct->setStoreId($storeId);
$extistingProduct->save();
ich dies täglich in cron laufen haben, separat für jeden Store. Es funktioniert normalerweise korrekt, nur die Preise für jedes Produkt pro Store ändern, aber manchmal passiert eine seltsame Dinge (wie einmal alle 2 Monate) - alle anderen Attribute neben dem Preis werden von Store X in den aktuellen Shop $storeId
überschrieben. Das bedeutet, dass meine gesamte englische Produktbeschreibung für alle betroffenen Produkte Deutsch (z. B.) wird.
Ich habe keine Ahnung, wie konnte das passieren, da jedes Mal, wenn ich es debuggen funktioniert, nur den Preis im aktuellen Umfang, den ich explizit festgelegt, aber alle anderen Produktattribute intakt lassen. Es sieht so aus, als ob es alle Produktdaten aus Store X lädt, den Preis einstellt und dann alle diese Werte speichert, die ich eingestellt habe, bevor ich das Produkt durch den Aufruf $extistingProduct->setStoreId($storeId)
aufrufe.
In diesem Fall werden alle Attribute vom selben Store überschrieben (zum Beispiel werden alle englischen Texte deutsch, aber alle anderen werden spanisch - sie stammen alle aus einem zufälligen Store).
Hat jemand eine Ahnung wie könnte das passieren? Was mache ich falsch?
Sie können diese Funktion updateAttributes wie folgt verwenden $ attributesData = array ("price" => $ data ['price'], "special_price" => $ data ['special_price'], "special_from_date" => $ data [ 'special_fromdate'], "special_to_date" => $ data ['special_todate']); store weise Mage :: getSingleton ('catalog/product_action') -> updateAttributes (array ($ productId), $ attributesData, $ storeId); – faizanbeg
Ich denke, das ist nur eine andere Notation für das gleiche, was ich mache? Ich sehe nicht, wie das mein Problem lösen kann. – KoviNET
Ihr Code ist zu situativ, als dass wir ihn jetzt korrigieren könnten. Das Problem könnte von vielen Faktoren herrühren, wie zum Beispiel "$ exististingProduct". Wenn Sie etwas Hilfe benötigen, dann würde zumindest das Einfügen der vollständigen foreach-Schleife helfen. –