2012-04-25 5 views
6

Dies wurde schon oft gefragt, aber ohne funktionierende Antwort.Magento - Setzen Sie das Produktattribut so, dass es die Standardwerte verwendet

Ich habe mehrere Geschäfte und einige Attribute wurden außer Kraft gesetzt. Ich möchte diese Attribute ändern, um 'Standardwert' mit einem Skript zu verwenden.

Hier zeigt ein Bildspeicher Ansichten und Kontrollkästchen 'Verwendung Standardwert' http://dl.dropbox.com/u/3209649/storeviews-and-defaultvalues.png(keine Bilder erlaubt noch zu schreiben)

In app/code/core/Mage/Adminhtml/controllers/Katalog/ProductController.php setData() wird mit false für das zweite Argument verwendet, wenn für alle Attribute 'Standardwert verwenden' ausgewählt wurde.

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

Der folgende Code versucht, den 'Namen' gesetzt Attribut 'Use default values' für das Produkt 1 in Speicher 3 mit der gleichen Methode.

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

Mit

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

richtig setzt die 'name' Attribut 'etwas', aber falsch nicht gesetzt es nicht zu 'Verwendung Standardwert'

'Use Default Value' ist nicht irgendwo in der Datenbank gespeichert, so dass es innerhalb der Controller für die Admin-Schnittstelle muss eine andere Prozedur, die die Attributzeile löscht?

Links zum Thema hier ->http://pastebin.com/raw.php?i=j7fwu9H6 (keine Links erlaubt noch entweder schreiben)

+0

Es tut mir leid, aber es ist unklar, was hier gefragt wird ist:

Um einen bestimmten Speicheransicht den Standardwert für ein bestimmtes Attribut zu machen. –

+0

Ich habe es aktualisiert und einen Link zu einem Bild hinzugefügt. Macht es jetzt Sinn? –

+1

Sie können auch einen SQL-Ansatz versuchen, wie hier beschrieben: http://magento.stackexchange.com/questions/1199/how-to-set-product-attribute-to-use-default-by-sql – WonderLand

Antwort

12

Das funktioniert nicht, weil Sie die aktuellen Speicher benötigen sind die Admin Store für diese Art von Operation.

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 ' Ich bin mir nicht sicher, ob ich verstehe, warum es so funktioniert, aber ich kann bestätigen, dass es so ist. Ich habe lange nach einer Lösung gesucht. Vielen Dank. –

+0

Hallo, ich sah ein Problem, als ich ein Skript ausgeführt, ohne den aktuellenStore zu geben, brach es mein Backoffice, Ändern von Standardwerten mit benutzerdefinierten Werten auf den Produkten. In meinem Skript habe ich nur das Produktgewicht aktualisiert, aber es hat nach dem Zufallsprinzip benutzerdefinierte Werte wie benutzerdefinierten Preis oder benutzerdefinierte Sichtbarkeit für die Produkte erstellt. Ich habe es später in db gelöscht, aber ich verstehe nicht, warum es wichtig ist, die Funktion setCurrentStore aufzurufen ... Könnten Sie etwas mehr erklären? – beluga

+0

'Mage :: app() -> setCurrentStore (Mage_Core_Model_App :: ADMIN_STORE_ID);' Nach vielen Stunden des Suchens über perfekten Code war mein einziges Problem, dass ich das brauchte. – FactoryAidan

Verwandte Themen