我已經實施了循環從外部服務和更新價格,重量,名稱和其他一些產品在Magento的多語言屬性谷數據,自定義的Magento模塊,多店網站。如何防止Magento的覆蓋,同時更新的產品從其他網站/店屬性值編程
我的解決方案是非常簡單的(我的模型由cron每天調用內部),如下:
/* 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();
我有這樣的cron中,每天每家店運行,分開。它通常能夠正常工作,只改變每個商店每個產品的價格,但有時會發生奇怪的事情(如每2個月一次) - 除了價格之外的所有其他屬性都會從商店X被覆蓋到當前商店$storeId
。這意味着我的所有英文產品說明都會成爲德語(例如)所有受影響的產品。
我不知道怎麼會這樣呢,因爲我每次調試時間,它工作正常,只是改變了價格在目前的範圍,這是我明確設置,但在離開的所有其他產品屬性不變。它似乎從Store X載入所有產品數據,設置價格,然後通過調用$extistingProduct->setStoreId($storeId)
將所有這些值存儲到我在保存產品前設置的值。
在情況下,當發生這種情況,所有的屬性會被覆蓋從同一存儲(例如所有的英文文本變成了德國人,但在其他情況下都將成爲西班牙 - 他們都是從一個隨機存儲)。
有沒有人有線索這可能發生怎麼樣?我究竟做錯了什麼?
可以使用此updateAttributes函數這樣$ attributesData =陣列( 「價格」=> $數據[ '價格'], 「special_price」=> $數據[ 'special_price'], 「special_from_date」=> $數據[ 'special_fromdate'],「special_to_date」=> $ data ['special_todate']);明智地存儲Mage :: getSingleton('catalog/product_action') - > updateAttributes(array($ productId),$ attributesData,$ storeId); – faizanbeg
我認爲這與我正在做的同樣的事情只是不同的符號?我不明白這怎麼能解決我的問題。 – KoviNET
您的代碼對我們來說過於情境化,無法解決您的問題。這個問題可能來自很多因素,比如你定義'$ extistingProduct'的地方。如果你需要一些幫助,那麼粘貼完整的foreach循環,至少會有所幫助。 –