在Magento中以编程方式创建/更新产品

时间:2012-08-02 15:40:08

标签: performance magento model product

我已经编写了一个导入产品的模块,我目前正在使用Magento的产品模型来相应地添加/更新产品。但是,事实证明这很慢(可能是因为我启用了目录索引?)。

即使只做

$product = Mage::getModel('catalog/product')->load($id);
$product->save();

非常慢 - 我们说每个产品可能需要2秒钟(我每个http请求需要5个,并且使用javascript来发出多个请求)。

每个产品都需要更新一些属性,更改类别ID,并更新库存水平。目前,我正在循环使用20种产品,并且耗时近60秒。在生产中,它将循环使用200-300种产品(尽管在功能更强大的服务器上)。

是否有更好/更快的方式来创建/更新产品?显然我可以使用SQL,但我并不想要搞清楚Magento强大的EAV数据库结构!

很抱歉,如果这是个问题,我不确定如何最好地说出来!

1 个答案:

答案 0 :(得分:1)

导入时将索引器模式设置为手动将至少为您带来一些性能提升。您显然可以在管理区域中设置此项,但您也可以通过脚本执行此操作:

//Set to manual mode
$processCollection = Mage::getSingleton('index/indexer')->getProcessesCollection();
foreach($processCollection as $process) {
    $process
        ->setMode(Mage_Index_Model_Process::MODE_MANUAL)
        ->save();
}

//Set back to real time mode
$processCollection = Mage::getSingleton('index/indexer')->getProcessesCollection();
foreach($processCollection as $process) {
    $process
        ->setMode(Mage_Index_Model_Process::MODE_REAL_TIME)
        ->save();
}

如果您想在导入后直接在脚本中重新编制索引...

$processCollection = Mage::getSingleton('index/indexer')->getProcessesCollection(); 
foreach($processCollection as $process) {
      $process
         ->reindexEverything();
}

但是, Magmi - http://sourceforge.net/projects/magmi/files/magmi-0.7/ - 不仅在导入产品时速度惊人,而且还提供了一些非常好的功能。

我不知道Magento的任何其他产品导入工具是否同样快(如果其他人知道一个快速或更快的产品会感兴趣吗?)