Magento 仅在商店级别保存一些属性
Magento save only some attributes at store level
我在 Magento 中有两个商店,每个产品都添加到 "global" 商店 (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 的价格时,它会保存商店级别的所有其他属性,这意味着例如对于产品的描述,"use default value" 标志在管理中未选中,如果我想更改两个商店的描述我必须在全局和商店 2 中都这样做。我做错了什么?有办法吗?
你可以使用单例:
Mage::getSingleton('catalog/product_action')->updateAttributes(
array($prod->getId()),
array('price'=>$price2),
Mage_Core_Model_App::ADMIN_STORE_ID
);
我在 Magento 中有两个商店,每个产品都添加到 "global" 商店 (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 的价格时,它会保存商店级别的所有其他属性,这意味着例如对于产品的描述,"use default value" 标志在管理中未选中,如果我想更改两个商店的描述我必须在全局和商店 2 中都这样做。我做错了什么?有办法吗?
你可以使用单例:
Mage::getSingleton('catalog/product_action')->updateAttributes(
array($prod->getId()),
array('price'=>$price2),
Mage_Core_Model_App::ADMIN_STORE_ID
);