2012-03-26 57 views
3

我想知道是否有方法更新一個或多個產品的magento索引。因此,例如,我有100個產品,我只是以編程方式更新價格......現在我需要啓動索引器,以便重新爲這100種產品定價。所以只是爲了清晰...更新一個或多個特定產品的Magento索引

我知道這是可能只需刷新所有產品的索引。例如,這將刷新價格指數上的所有產品:

$process = Mage::getSingleton('index/indexer')->getProcessByCode('catalog_product_price'); 
$process->reindexEverything(); 

而且我也知道這是可能刷新所有的只是一個產品的指標(或幾種產品,如果你這樣做在一個循環中):

Mage::getSingleton('index/indexer')->processEntityAction(
    $product, Mage_Catalog_Model_Product::ENTITY, 
    Mage_Index_Model_Event::TYPE_SAVE 
); 

但是,這些選項都不適用於我。我需要能夠做這兩個的橫截面。我怎樣才能購買一種或多種產品,並刷新一個指標,如價格指數?

我正在使用Magento CE 1.6.2.0。

編輯:順便說一句,在Magento 1.3上,我能夠通過執行以下操作來完成此操作,但這似乎不再適用。

Mage::getModel('catalogindex/indexer')->plainReindex(
    $listOfProductIds, 
    Mage_CatalogIndex_Model_Indexer::REINDEX_TYPE_PRICE 
); 

回答

1

嘗試

Mage::getSingleton('catalogindex/indexer')->plainReindex($productIds); 
Mage::getSingleton('catalogindex/aggregation')->clearProductData($productIds); 

另一個想法:

Mage::getResourceModel('catalog/product_indexer_price')->reindexProductIds($productIds); 

這一次爲我的作品:

$catalogSearchIndexer = Mage::getResourceSingleton('catalogsearch/fulltext'); 
$catalogSearchIndexer->rebuildIndex($storeId, $productIds); 
+0

索引所有未完成的更改。嗨Zyava。你確定這對Magento 1.6有效嗎?這基本上與我們在Magento 1.3安裝上的代碼基本相同,但似乎不適用於1.6。我可能做錯了什麼,但是我想我會問你是否已經成功地將它用於1.6版本? – shaune 2012-03-26 20:10:04

+0

它應該工作,因爲我在'app \ code \ core \ Mage \ CatalogIndex \ Model \ Observer.php'中找到了這個代碼,參見'processAfterSaveEvent()'方法。你確定你在腳本中選擇了管理員存儲('Mage :: app('admin')')? – Zyava 2012-03-27 06:11:48

+0

謝謝做代碼搜索,但我絕對肯定它不起作用,至少不在magento ce 1.6.2.0上。它確實在1.3.3.0上工作。代碼的這一部分基本上被剝奪了(儘管沒有註釋這麼說) - 只要在代碼庫中搜索對該方法的引用,就會發現它並沒有被調用過。我認爲Mage_CatalogIndex模塊被Mage_Index模塊取代會發生什麼。 – shaune 2012-03-27 15:43:37

1

如果您在索引模式設置爲手動,它仍然跟蹤index_event中的所有更改。您可以使用$process->indexEvents();

+0

此方法是否將索引狀態更改爲「就緒」?運行此方法後,索引管理仍顯示「需要索引」作爲狀態。 – Robi 2014-11-21 19:12:17