2010-12-03 107 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批量导入过程中,以防止在每次产品保存方法调用时触发索引器。

希望这会有所帮助。 关注,亚历山德罗