Magento使用updateAttributes设置产品属性的“使用默认值”

时间:2012-02-15 22:11:25

标签: magento

我有一个多商店设置,我正在为特定商店设置产品属性以使用“使用默认值”选项 - (即使用商店视图中的值),如下所示:

$_product = Mage::getModel('catalog/product');
$_product->load($productId);
$_product->setStoreId($storeId)->setName(false)->save();

这将$ productId的storeId的Name属性设置为使用“Use Default Value”

鉴于我有很多要设置的属性我试图使用:

Mage::getSingleton('catalog/product_action')->updateAttributes(array($productId), array('name' => false), $storeId);

但这并未将“使用默认值”复选框设置为true。

如何使用 - > updateAttributes设置商店值以使用“使用默认值”选项?

截图:

enter image description here

2 个答案:

答案 0 :(得分:4)

“使用默认值”标志不会在任何地方存储在数据库中。

Magento核心在保存产品时使用该标志来执行此操作:

   /**
     * Check "Use Default Value" checkboxes values
     */
    if ($useDefaults = $this->getRequest()->getPost('use_default')) {
        foreach ($useDefaults as $attributeCode) {
            $product->setData($attributeCode, false);
        }
    }

在做其他事情之前。

我会查看Mage_Adminhtml_Catalog_ProductController(app / code / core / Mage / Adminhtml / controllers / Catalog / ProductController.php)并了解Magento核心是如何做到的。

具体为saveAction()_initProductSave()

我希望这能指出你正确的方向。

答案 1 :(得分:1)

只需使用0作为商店ID(管理商店),这与Magento Admin中的默认值相同。

Mage::getSingleton('catalog/product_action')
    ->updateAttributes(
        array($productId),
        array('name' => false),
        0);

如果您已设置商店视图范围,则必须进入并重新检查使用默认值,否则它将覆盖相关范围的属性。

可能有一种方法可以通过编程方式设置它们。我不确定。