2010-12-03 88 views
8

我目前正在編寫一個腳本,可以讓我在magento中導入多個產品。Magento API:添加新產品後重建索引

$product = Mage::getModel('catalog/product'); 
$product->setSku($data['sku']); 
//etc etc 
$product->save(); 

產品得到完美的創造,但它不會在我的前端顯示,直到我要麼保存在後端(不改變任何東西!)或I重建索引在後端。

我在相關的數據庫表上做了一個比較,以查看保存產品並將這些字段添加到我的導入腳本中時發生了什麼變化,但沒有任何影響。導入的產品必須OK,因爲當我通過後端手動重建索引時,它顯示出來。

緩存已完全禁用。

現在我的問題是:如何在導入我的產品後重建索引?

回答

34

您可以在Index模塊中使用這樣的模型。

$processes = Mage::getSingleton('index/indexer')->getProcessesCollection(); 
$processes->walk('reindexAll'); 

由於您需要重建所有索引,因此不存在適用於收集的過濾器。但是您可以通過addFieldToFilter($field, $condition)方法通過一組參數(代碼,上次重新索引等)來過濾索引進程列表。

小建議

將是巨大的設定指標爲手動模式,而你導入的產品,它會幫助你加快導入過程,因爲他們中的一些觀察產品節省事件,所以需要一段時間。您可以通過以下方式完成:

$processes = Mage::getSingleton('index/indexer')->getProcessesCollection(); 
$processes->walk('setMode', array(Mage_Index_Model_Process::MODE_MANUAL)); 
$processes->walk('save'); 
// Here goes your 
// Importing process 
// ................ 
$processes->walk('reindexAll'); 
$processes->walk('setMode', array(Mage_Index_Model_Process::MODE_REAL_TIME)); 
$processes->walk('save'); 
+0

這是輝煌的,偉大的工程!謝謝! – Alex 2010-12-03 09:12:40

4

至少有兩種情況會阻止索引器在保存時重新索引產品。

其中之一:在系統,索引管理下找到的索引屬性中的「手動更新」設置。如果您希望產品在保存時編入索引,則應將其設置爲「保存時更新」。

二:setIsMassupdate產品標誌,例如用於DataFlow批量導入過程中,以防止在每次產品保存方法調用時觸發索引器。

希望這會有所幫助。 關注,亞歷山德羅