Magento API:添加新产品后重建索引

Ale*_*lex 8 api import product magento

我目前正在编写一个脚本,让我可以在magento中导入多个产品.

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

产品创建完美但它不会出现在我的前端,直到我将它保存在后端(没有更改任何东西!)或者我在后端重建索引.

我在相关数据库表上做了一个差异,看看当我保存产品并将这些字段添加到我的导入脚本时会发生什么变化,但它没有任何效果.导入的产品必须正常,因为当我通过后端手动重建索引时它会显示出来.

缓存完全禁用.

现在我的问题是:如何在导入我的产品后重建索引?

Iva*_*nyi 35

您可以在索引模块中使用此类模型.

$processes = Mage::getSingleton('index/indexer')->getProcessesCollection();
$processes->walk('reindexAll');
Run Code Online (Sandbox Code Playgroud)

由于您需要重建所有索引,因此没有适用于集合的过滤器.但是您可以通过方法按参数集(代码,上次重新索引等)过滤索引进程列表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');
Run Code Online (Sandbox Code Playgroud)