2012-04-25 5 views
6

Это задавали много раз, но без рабочего ответа.Magento - Установить атрибут продукта для использования значений по умолчанию

У меня есть несколько магазинов и некоторые атрибуты были переопределены. Я хочу изменить эти атрибуты на «использовать значение по умолчанию» со сценарием.

Здесь изображение показывает вид на магазин и «значение по умолчанию использование» флажков http://dl.dropbox.com/u/3209649/storeviews-and-defaultvalues.png(не разрешено размещать изображения пока)

В приложения/код/​​ядра/Mage/Adminhtml/Контроллеры/Каталог/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); 
    } 
} 

Следующий код пытается установить «имя» атрибут «стоимости по умолчанию» для продукта 1, в магазине 3, используя тот же метод.

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

правильно задает 'имя' атрибут 'ничего', но ложной не устанавливает его на 'использование значения по умолчанию'

'Use Default Value' является не хранится нигде в базе данных, поэтому внутри контроллера для интерфейса администратора должна быть другая процедура, которая удаляет строку атрибута?

Ссылки по теме здесь ->http://pastebin.com/raw.php?i=j7fwu9H6 (не разрешено размещать ссылки еще ни)

+0

Мне очень жаль, но это не ясно, что спрашивают здесь. –

+0

Я обновил его и добавил ссылку на изображение. Это имеет смысл сейчас? –

+1

вы также можете попробовать SQL-подход, как описано здесь: http://magento.stackexchange.com/questions/1199/how-to-set-product-attribute-to-use-default-by-sql – WonderLand

ответ

12

Это не работает, потому что вам нужен текущий магазин, являющуюся администратора магазина для такого рода работы.

Для того, чтобы конкретный вид магазина использовать значение по умолчанию для данного атрибута:

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

I ' Я не знаю, почему я так понимаю, но могу это подтвердить. Я искал решение этого в течение длительного времени. Спасибо. –

+0

Привет, я столкнулся с проблемой, когда я запустил скрипт без предоставления currentStore, он сломал мой бэк-офис, изменив значения по умолчанию с пользовательскими значениями на продуктах. В моем сценарии я просто обновил вес продукта, но он создал пользовательские значения, например, пользовательскую цену или пользовательскую видимость для продуктов. После этого я удалил его в db, но я не понимаю, почему важно вызвать функцию setCurrentStore ... Не могли бы вы объяснить немного больше? – beluga

+0

'Mage :: app() -> setCurrentStore (Mage_Core_Model_App :: ADMIN_STORE_ID);« После многих часов просмотра совершенного кода моя единственная проблема заключалась в том, что мне это нужно. – FactoryAidan