Magento - Set product attribute to use default values

廉价感情. 提交于 2019-12-18 13:30:31

问题


This has been asked many times before but with no working answer.

I have multiple stores and some attributes have been overridden. I want to change these attributes to 'use default value' with a script.

Here is an image showing store views and 'use default value' checkboxes http://dl.dropbox.com/u/3209649/storeviews-and-defaultvalues.png (not allowed to post images yet)

In app/code/core/Mage/Adminhtml/controllers/Catalog/ProductController.php setData() is used with false for the second argument when 'Use Default Value' has been selected for any attributes.

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

The following code attempts to set the 'name' attribute to 'use default values' for product 1 in store 3 using the same method.

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

Using

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

correctly sets the 'name' attribute to 'anything' but false does not set it to 'use default value'

'Use Default Value' is not stored anywhere in the database so within the controller for the admin interface there must be another procedure that deletes the attribute row?

Related Links here -> http://pastebin.com/raw.php?i=j7fwu9H6 (not allowed to post links yet either)


回答1:


This doesn't work because you need the current store being the admin store for this kind of operation.

To make a specific store view use the default value for a given attribute:

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


来源:https://stackoverflow.com/questions/10313936/magento-set-product-attribute-to-use-default-values

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!