2012-08-02 105 views
0

我已经编写了一个模块来导入产品,我目前正在使用Magento的产品模型来相应地添加/更新产品。但是,这被证明是非常缓慢的(可能是因为我已启用目录索引?)。在Magento中以编程方式创建/更新产品

即使这样做只是

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

是慢得令人难以置信 - 我们谈论每个产品也许2秒(我做5%的HTTP请求,并使用JavaScript进行多次请求)。

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

是否有创建/更新产品的更好/更快的方式?很明显,我可以使用SQL,但我不喜欢搞清楚Magento的EAV数据库结构!

对不起,如果这是一个难看的问题,我不知道如何最好的文字!

+1

你试过MAGMI的?它是导入/更新产品的最佳工具 – OSdave 2012-08-02 15:45:42

+0

甚至没有听说过它是诚实的,但我可能会放弃它!这个相同的导入过程(最初是这样的,但现在已经被取消)连接到Microsoft Dynamics MSSQL数据库,并从cron作业导入产品,因此花费10分钟的时间来处理200个产品并不是一个可行的选择! 我会看看这个,谢谢:) – HughieW 2012-08-02 15:50:44

+0

你能发布更多的代码吗?我做了同样的事情,我的导入过程并不慢。 – 2012-08-02 18:17:19

回答

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的就是以最快的速度(有兴趣,如果其他人一个是快或更快的知道?)

+0

我会试试这个,非常感谢!我会回报是否帮助:) – HughieW 2012-08-03 16:25:42

相关问题