2012-04-25 17 views
6

To pytanie zostało zadane wiele razy wcześniej, ale bez działającej odpowiedzi.Magento - Ustaw atrybut produktu, aby używał wartości domyślnych.

Mam wiele sklepów i niektóre atrybuty zostały nadpisane. Chcę zmienić te atrybuty, aby "używać wartości domyślnej" ze skryptem.

Tutaj jest obraz przedstawiający widoki sklepu i wyboru 'wartość domyślna użycia' http://dl.dropbox.com/u/3209649/storeviews-and-defaultvalues.png(nie wolno dodawać jeszcze zdjęć)

W app/code/core/Mage/Adminhtml/controllers/Katalog/ProductController.php setData() jest używany z false dla drugiego argumentu, gdy dla dowolnych atrybutów wybrano opcję "Użyj wartości domyślnej".

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

Poniższy kod próbuje ustawić „name” „przypisywać domyślne wartości użycia” dla produktu 1 w magazynie 3 stosując tę ​​samą metodę.

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

Korzystanie

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

poprawnie ustawia „name” atrybut „coś”, ale fałszywego nie ustawić go do „wartości domyślnej użytku”

„Użyj domyślnej wartości” jest nie przechowywane w dowolnym miejscu w bazie danych, więc w kontrolerze dla interfejsu administratora musi być inna procedura, która usuwa wiersz atrybutu?

Powiązane linki tutaj ->http://pastebin.com/raw.php?i=j7fwu9H6 (nie wolno umieszczać linki albo jeszcze)

+0

Przykro mi, ale nie jest jasne, co jest proszony jest tutaj. –

+0

Zaktualizowałem i dodałem link do obrazu. Czy teraz ma sens? –

+1

można również wypróbować metodę SQL opisaną tutaj: http://magento.stackexchange.com/questions/1199/how-to-set-product-attribute-to-use-default-by-sql – WonderLand

Odpowiedz

12

To nie działa, ponieważ trzeba aktualny sklep będąc sklep Administrator dla tego rodzaju operacji.

Aby specyficzny pogląd sklep używać wartości domyślnej dla danego atrybutu:

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 ' Nie jestem pewien, czy rozumiem, dlaczego tak działa, ale mogę to potwierdzić. Od dawna szukam rozwiązania tego problemu. Dziękuję Ci. –

+0

Witam, stanąłem przed problemem, kiedy uruchomiłem skrypt bez podawania currentStore, zepsuło to moje zaplecze, zmieniając domyślne wartości z niestandardowymi wartościami na produktach. W moim skrypcie właśnie zaktualizowałem wagę produktów, ale stworzyłem niestandardowe wartości, takie jak niestandardowa cena lub niestandardowa widoczność losowo dla produktów. Usunąłem go w db później, ale nie rozumiem, dlaczego ważne jest wywołanie funkcji setCurrentStore ... Czy możesz wyjaśnić trochę więcej? – beluga

+0

'Mage :: app() -> setCurrentStore (Mage_Core_Model_App :: ADMIN_STORE_ID);' Po wielu godzinach szukania idealnego kodu, moim jedynym problemem było to, że potrzebowałem tego. – FactoryAidan