我已经实现了定制的Magento模块,该模块通过外部服务的数据循环,并在Magento多语言、多商店网站中更新价格、重量、名称和其他一些产品属性
我的解决方案非常简单(在Cron每天调用的模型中),如下所示:
/*这是FOREACH循环中的代码片段*/
$storeId=(字符串)$jobConfig->;储存//每个商店的cron
Mage::app()->;setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);
$extistingProduct=Mage::getModel('catalog/product')->;loadByAttribute('sku',$sku);
$extistingProduct->;设定价格($newPrice)//更新价格
//此处处理可配置产品的关联产品的一些代码可能不相关
//...
$extistingProduct->;setCanSaveConfigurableAttributes(true);
$extistingProduct->;setCanSaveCustomOptions(true);
$extistingProduct->;setConfigurableAttributesData($configurableAttributesData);
//这会告诉Magento将给定的简单产品与此可配置产品关联。。
$extistingProduct->;setConfigurableProductsData($configurableProductsData);
$extistingProduct->;setStoreId($storeId);
$extistingProduct->;save();
我每天都会在cron中运行它,每个商店都会单独运行。它通常工作正常,只改变每个商店的每个产品的价格,但有时会发生奇怪的事情(比如每2个月一次)——从商店X到当前商店,除了价格之外的所有其他属性都会被覆盖$storeId。这意味着对于所有受影响的产品,我所有的英文产品描述都将变成德语(例如)
我不知道这是怎么发生的,因为每次我调试它时,它都正常工作,只更改当前范围内的价格(我显式设置了该范围),但保留所有其他产品属性不变。它似乎从Store X加载所有产品数据,设置价格,然后将所有这些值存储到Store中,我通过调用$extistingProduct->;保存产品之前设置了这些值;setStoreId($storeId)
在这种情况下,所有属性都会从同一存储区被覆盖(例如,所有英文文本都会变成德语,但在其他情况下,所有属性都会变成西班牙语-它们都来自one随机存储区)
有人知道这怎么可能发生吗?我做错了什么
我每天的行为都和你一样,我用magmi实现了一个cron,正如L.Palaiokostas提到的。它工作得很好,我每天同步20万个这样的产品。
我所做的是创建一个临时表,在其中收集所有外部数据,并使用magmi执行我的请求,将magento的数据与我的临时表进行比较。这给了我一个增量,由magmi自动更新或创建
一开始我对此持怀疑态度,为此花了数周时间,但一年来它一直运行良好,没有任何问题
希望这会有所帮助