7

这已经被问过很多次了,但没有有效的答案。

我有多家商店,并且某些属性已被覆盖。我想通过脚本将这些属性更改为“使用默认值”。

这是显示商店视图和“使用默认值”复选框 的图像http://dl.dropbox.com/u/3209649/storeviews-and-defaultvalues.png (还不允许发布图像)

app/code/core/Mage/Adminhtml/controllers/Catalog/ProductController.php中,当为任何属性选择了“使用默认值”时,setData() 与false一起用于第二个参数。

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

以下代码尝试使用相同的方法将商店 3 中的产品 1 的“名称”属性设置为“使用默认值”。

require_once '../app/Mage.php';
Mage::app(3);

$product = Mage::getModel('catalog/product')->load(1);

$product->setData('name', false); # as used in ProductController.php
$product->save();

使用

$product->setData('name', 'anything');

正确地将“name”属性设置为“anything”,但false未将其设置为“使用默认值”

“使用默认值”未存储在数据库中的任何位置,因此在管理界面的控制器中必须有另一个删除属性行的过程?

此处的相关链接-> http://pastebin.com/raw.php?i=j7fwu9H6 (也不允许发布链接)

4

1 回答 1

14

这不起作用,因为您需要将当前存储作为此类操作的管理存储。

要使特定的商店视图使用给定属性的默认值:

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

$product = Mage::getModel('catalog/product')
    ->load($product_id)         // in your case: 1
    ->setStoreId($store_id)     // in your case: 3
    ->setData($attr, false)     // in your case: 'name'
    ->save();
于 2012-04-25T13:40:12.700 回答