Я внедрил собственный модуль Magento, который обрабатывает данные из внешних сервисов и обновляет цены, вес, имя и некоторые другие атрибуты продукта на многоязычном веб-сайте Magento с несколькими магазинами.
Мое решение довольно прямолинейно (внутри моей модели, вызываемой Cron каждый день), как показано ниже:
/* THIS IS CODE SNIPPET INSIDE FOREACH LOOP */
$storeId = (string)$jobConfig->store; //cron for each store
Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);
$extistingProduct = Mage::getModel('catalog/product')->loadByAttribute('sku', $sku);
$extistingProduct->setPrice($newPrice); //update price
//some code here dealing with Associated products of Configurable product probably not relevant
//...
$extistingProduct->setCanSaveConfigurableAttributes(true);
$extistingProduct->setCanSaveCustomOptions(true);
$extistingProduct->setConfigurableAttributesData($configurableAttributesData);
// This tells Magento to associate the given simple products to this configurable product..
$extistingProduct->setConfigurableProductsData($configurableProductsData);
$extistingProduct->setStoreId($storeId);
$extistingProduct->save();
У меня это в cron работает ежедневно, отдельно для каждого Магазина. Обычно он работает правильно, только изменяя цену каждого продукта за Магазин, но иногда случаются странные вещи (например, раз в два месяца) - все остальные атрибуты, кроме цены, переписываются из Store X в текущий магазин $storeId
. Это означает, что все мои описания на английском языке становятся немецкими (например, для всех затронутых продуктов).
Я не знаю, как это могло случиться, так как каждый раз, когда я отлаживаю, он работает корректно, только меняя цену в текущей области, которую я явно задал, но оставил все остальные атрибуты продукта неповрежденными. Кажется, что он загружает все данные продукта из Store X, устанавливает цену, а затем сохраняет все эти значения для хранения, которые я установил перед сохранением продукта, вызывая $extistingProduct->setStoreId($storeId)
.
В ситуациях, когда это происходит, все атрибуты переписываются из одного хранилища (например, все английские тексты становятся немецкими, но в любом случае все станет испанским - все они из one random Store).
Кто-нибудь знает, как это могло произойти? Что я делаю неправильно?