【问题标题】:Magento setting Product Attribute's "Use Default Value" using updateAttributesMagento 使用 updateAttributes 设置产品属性的“使用默认值”
【发布时间】:2012-02-15 22:11:25
【问题描述】:

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

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

这会将 $productId 的 storeId 的 Name 属性设置为使用“使用默认值”

鉴于我有很多要设置的属性,我正在尝试使用:

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

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

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

截图:

【问题讨论】:

  • @OSdave 不,这不是该问题的重复(尽管我使用了相同的屏幕截图)。这个问题专门关于 updateAttributes 的问题,而在另一个问题中我什至没有提到 updateAttributes。更长的解释:在解决另一个问题的解决方案时,我遇到了一个与 updateAttributes 相关的新问题,因此我问了这个问题(鉴于这是一个不同的问题)。
  • 你最后用什么来解决你的问题?

标签: magento


【解决方案1】:

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

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()

我希望这会为您指明正确的方向。

【讨论】:

  • 不幸的是,这并不能真正回答问题。不幸的是,正确的答案是通过updateAttributes() 是不可能的。另请参阅this Magento SE answer
  • 确实,它确实回答了这个问题。问题本质上是“如何设置商店值以使用'使用默认值'选项?”,虽然你不能使用 ->updateAttributes,但我的回答给出了你如何做的详细信息。
【解决方案2】:

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

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

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

可能有一种方法可以以编程方式设置这些。我不确定。

【讨论】:

    猜你喜欢
    • 2012-05-06
    • 2017-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多