Как запретить Magento перезаписывать значения атрибутов с другого сайта/магазина при программном обновлении продуктов

Я внедрил собственный модуль 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).

Кто-нибудь знает, как это могло произойти? Что я делаю неправильно?

Ответ 1

Я делаю то же поведение, что и вы каждый день, и я реализовал cron с magmi, как упоминал Л. Palaiokostas. Он работает отлично, я ежедневно синхронизирую 200k продуктов. То, что я сделал, это временная таблица, где я собираю все внешние данные, а с магмой я делаю свой запрос, который сравнивает данные пурпурного с моей временной таблицей. Это дает мне дельту, которая обновляется или создается автоматически магми.

Я был скептичен в начале и провел несколько недель на этом, но он работает с года без проблем!

Надеюсь, это поможет.

Ответ 2

У меня была аналогичная проблема, и я не мог найти способ правильно ее использовать, используя собственные функции Magento. Я в конечном итоге использую Magmi (Magmi API чтобы быть более конкретным), чтобы правильно создавать/обновлять мои продукты.

P.S. Я знаю, что это не "Путь Magento", но это был единственный способ, который я нашел, потратив много времени на исследования. Поэтому я отправляю это как альтернативное решение.