2016-03-21 48 views
10

我已經實施了循環從外部服務和更新價格,重量,名稱和其他一些產品在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)將所有這些值存儲到我在保存產品前設置的值。

在情況下,當發生這種情況,所有的屬性會被覆蓋從同一存儲(例如所有的英文文本變成了德國人,但在其他情況下都將成爲西班牙 - 他們都是從一個隨機存儲)。

有沒有人有線索這可能發生怎麼樣?我究竟做錯了什麼?

+0

可以使用此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

+0

我認爲這與我正在做的同樣的事情只是不同的符號?我不明白這怎麼能解決我的問題。 – KoviNET

+0

您的代碼對我們來說過於情境化,無法解決您的問題。這個問題可能來自很多因素,比如你定義'$ extistingProduct'的地方。如果你需要一些幫助,那麼粘貼完整的foreach循環,至少會有所幫助。 –

回答

-1

我有一個類似的問題,我找不到使用Magento的本機功能來正確使用它的方法。我最終使用Magmi(Magmi的API更具體)來正確創建/更新我的產品。

P.S.我知道這不是「Magento的方式」,但這是我花費大量時間研究後發現的唯一方法。所以我發佈這個作爲替代解決方案。

+0

我也在考慮Magmi,但是我有相當複雜的更新系統,已經編碼了許多關於可配置和捆綁產品的細節。但是因爲我的解決方案也越來越慢,我會給Magmi一個嘗試。 – KoviNET

+1

將你的實現變成一個新的可能是「痛苦的」,兼容magmi,但性能明智,它是完全值得的。 Magmi創建/更新產品的速度比原生Magento方式快得多。 –

0

我做同樣的行爲,你每天和我實現了一個cron與magmi爲L. Palaiokostas mentionned。它工作完美,我每天同步200k產品。 我做的事情是在臨時表中收集所有外部數據,並且通過magmi,我按照我的要求將magento的數據與臨時表進行比較。這給了我一個由magmi自動更新或創建的增量。

我在開始時持懷疑態度,並在此度過了好幾個星期,但由於一年它的工作原理沒有煩惱!

希望這會有所幫助。

+0

我只有3k產品,而我的這種更新方式每個商店需要30-40分鐘。通過使用Magento REST/SOAP API更新過程甚至更慢,甚至完全不支持可配置產品。所以看起來Magmi是一個很好的選擇,我會試試看。 – KoviNET

+0

僅供參考如果我記得上傳7個商店中分離的100k新產品目錄,我花了16個小時。 就在今天晚上,我的每日增量導入需要14分鐘來重新同步所有價格和產品,這些價格和產品已從我的外部目錄中更改,因此根據遠距離數據的數量很快。 剛開始的時候我正在使用普通的magento,每天晚上都會崩潰,太可怕了! Magmi在我的項目中實際上是這樣一種救贖:) –

相關問題