У меня есть два магазина в Magento, каждый продукт добавляется в «глобальный» магазин (id = 0), так что он доступен в обоих магазинах, первый магазин отражает продукт в глобальном магазине, атрибут не добавляется на уровне магазина, Второй должен делать то же самое, за исключением цены, которая отличается. Я создал скрипт для синхронизации цен на товары и описания из CSV:
//Load global product
Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);
$prod = Mage::getModel('catalog/product')->loadByAttribute('sku', $sku);
//Save global data for product
if ($prod->getDescription() != $desc) $prod->setDescription($desc);
if ($prod->getPrice() != $price1) $prod->setPrice($price1);
$prod->save();
//Reload product in store 2
$prod2 = Mage::getModel('catalog/product')->setStoreId(2)->load($prod->getId());
//Save data for store 2
if ($prod2->getPrice() != $price2) $prod2->setPrice($price2);
$prod2->save();
Проблема здесь в том, что когда я сохраняю цену для магазина 2, он сохраняет все остальные атрибуты на уровне магазина, это означает, что, например, для описания продукта флаг «использовать значение по умолчанию» не отмечен при администрировании, и если я хочу изменить описание в обоих магазинах я должен сделать это в глобальном и магазине 2. Что я делаю не так? Есть ли способ сделать это?
Вы можете использовать синглтон:
Mage::getSingleton('catalog/product_action')->updateAttributes(
array($prod->getId()),
array('price'=>$price2),
Mage_Core_Model_App::ADMIN_STORE_ID
);
Других решений пока нет …