以前曾多次询问过这个问题,但没有正确的答案。
我有多个商店,并且已覆盖了一些属性。我想用脚本将这些属性更改为“使用默认值”。
这是显示商店视图和“使用默认值”复选框的图像 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的“name”属性设置为“use default values”。
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'属性设置为'nothing',但 false 不会将其设置为'使用默认值'
'使用默认值'不会存储在数据库的任何位置,因此在管理界面的控制器中必须有另一个删除属性行的过程吗?
此处相关链接 - > http://pastebin.com/raw.php?i=j7fwu9H6 (不允许发布链接)
答案 0 :(得分:12)
这不起作用,因为您需要当前商店作为 admin商店进行此类操作。
要创建特定的商店视图,请使用给定属性的默认值:
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();