我目前正在编写一个脚本,可以让我在magento中导入多个产品。
$product = Mage::getModel('catalog/product');
$product->setSku($data['sku']);
//etc etc
$product->save();
产品创建完美但它不会出现在我的前端,直到我将它保存在后端(没有更改任何东西!)或者我在后端重建索引。
我在相关的数据库表上做了一个差异,看看当我保存产品并将这些字段添加到我的导入脚本时会发生什么变化,但它没有任何效果。导入的产品必须正常,因为当我通过后端手动重建索引时它会显示出来。
完全禁用缓存。
现在我的问题是:如何在导入我的产品后重建索引?
答案 0 :(得分:35)
您可以在索引模块中使用此类型号。
$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');
答案 1 :(得分:4)
至少有两种情况会阻止索引器在保存时重新索引产品。
一:您在系统,索引管理下找到的索引属性中的“手动更新”设置。如果您希望在保存时对产品编制索引,则应将其设置为“保存时更新”。
二:setIsMassupdate产品标志,例如,在DataFlow批量导入过程中使用,以防止在每次产品保存方法调用时触发索引器。
希望这会有所帮助。 此致,亚历山德罗