【问题标题】:Programmatically change product attribute at store view level在商店视图级别以编程方式更改产品属性
【发布时间】:2011-07-07 17:34:36
【问题描述】:

如果这个问题是微不足道的,我很抱歉,但我一直在努力找出我做错了什么。我正在尝试更改商店视图级别的属性值,但默认值也更改了,而它不应该更改。当然,这个属性被设置为“store-view-scoped”。为简单起见,我尝试使用产品名称。没有成功。

以下是我尝试过的不成功的测试...

你看到我在这里做错了吗?

非常感谢。


我的尝试:

$product = Mage::getModel('catalog/product')->load(PRODUCT_ID);
$product->setStoreId(STORE_ID)->setName('new_name')->save();

$product = Mage::getModel('catalog/product')->load(PRODUCT_ID);
$product->setStoreId(STORE_ID)->setStore(STORE_CODE)->setName('new_name')->save();

$product = Mage::getModel('catalog/product')->load(PRODUCT_ID);
$product->setStoreId(STORE_CODE)->setName('new_name')->save();

$product = Mage::getModel('catalog/product')->setStoreId(STORE_ID)->load(PRODUCT_ID);
$product->setName('new_name')->save();

$product = Mage::getModel('catalog/product')->setStoreId(STORE_ID)->load(PRODUCT_ID);
$product->setStoreId(STORE_ID)->setName('new_name')->save();

我什至尝试在产品模型加载之前添加以下行...

Mage::app()->setCurrentStore(STORE_ID);

【问题讨论】:

  • 如果你也在那里加上 ->setWebsiteId($websiteId) 是否有效?
  • 不...不起作用。还是谢谢。
  • 如何从多商店的选定网站中删除所有产品?

标签: magento


【解决方案1】:

所以这里是完整的 sn-p 来更改特定商店视图上特定产品属性的属性值。产品名称示例:

Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);
$product = Mage::getModel('catalog/product')->load(PRODUCT_ID);
$product->setStoreId(STORE_ID)->setName('my_new_product_name')->save();

作为附加答案,您可能有兴趣将属性值更改为默认值。在这种情况下,必须将参数“false”传递给 setAttribute:

Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);
$product = Mage::getModel('catalog/product')->load(PRODUCT_ID);
$product->setStoreId(STORE_ID)->setName(false)->save();

【讨论】:

  • 感谢分享 false - 这是一个有用的提示。
  • 嘿@ʍǝɥʇɐɯ,我正在更新每个商店视图级别的产品价格,但没有成功。这个答案也适用于价格吗
  • 请告诉我路径太 magentio2.2.4
  • 如果有人想在 Magento 2 中实现这一点,这里是链接 magento.stackexchange.com/a/173763/73212
【解决方案2】:

您需要在代码块顶部将当前商店设置为管理员:

Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);

【讨论】:

  • 请参阅下面我自己的答案以获得完整的 sn-p + 有趣的附加信息。感谢 ʍǝɥʇɐɯ 的帮助。
【解决方案3】:

请注意,在为某些商店视图加载带有数据的产品时,也会加载默认值。保存此类产品会将默认值保存为商店值(因此未设置字段的“使用默认值”) 我最终得到了以下功能来清除默认值中的产品数据

public static function _removeDefaults($item) {
    static $attributeCodes = null;
    if($attributeCodes == null) {
        $attributes = Mage::getSingleton('eav/config')
            ->getEntityType(Mage_Catalog_Model_Product::ENTITY)->getAttributeCollection();
        $attributeCodes = array();
        foreach($attributes as $attribute) {
            $ac = $attribute->getAttributeCode();
            if(in_array($ac, array('sku','has_options','required_options','created_at','updated_at','category_ids'))) {
                continue;
            }
            $attributeCodes[] = $ac;
        }
    }
    foreach($attributeCodes as $ac) {
        if(false == $item->getExistsStoreValueFlag($ac)) {
            $item->unsetData($ac);
        }
    }
}

记住只发送为某些商店视图加载的产品

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-03
    • 1970-01-01
    • 1970-01-01
    • 2019-08-26
    • 2013-03-09
    • 1970-01-01
    • 2011-09-28
    • 1970-01-01
    相关资源
    最近更新 更多