Ich weiß, wie ich ein Produktattribut aus einem Installationsskript hinzufügen kann, aber wie kann ich Magento anweisen, einen der Werte als Standardwert zu verwenden? (oder mehr Werte, falls es sich um ein Mehrfachauswahlattribut handelt).
Ich verwende diesen Code in einem Installationsskript, um ein Attribut mit folgenden Optionen hinzuzufügen:
$installer->addAttribute('catalog_product', "some_code_here", array(
'type' => 'int', //or varchar if it's multiselect
'input' => 'select', //or multiselect
'label' => 'Attribute label here',
'sort_order' => 1000,
'required' => false,
'global' => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_STORE,
'backend' => 'eav/entity_attribute_backend_array',
'option' => array (
'values' => array(
0 => 'Value 1',
1 => 'Value 2',
2 => 'Value 3',
)
),
));
Also muss ich Value 2
den Standardwert festlegen. Oder Value 2
und Value 3
falls ich ein Mehrfachauswahlattribut erstelle
product
attributes
Marius
quelle
quelle
default => 'value 2’
?color
mit OptionenRed, Green, Blue
und möchte (ohne Administratorinteraktion), dass dieGreen
Option die Standardoption ist. Ich hoffe das war etwas klarer.Antworten:
tl; dr: Für ausgewählte Attribute kann dies nicht direkt beim ersten
addAttribute()
Aufruf deklariert werden . Es sind zwei Anrufe erforderlich.Um den Standardwert
eav_attribute.default
festzulegen , muss er mit dem Primärschlüsselwert aus dereav_attribute_option
Tabelle festgelegt werden. Auf hoher Ebene wird die Notwendigkeit von zwei Aufrufen anhand des Ablaufs und der Funktion der MethodenaddAttribute()
und ersichtlichaddAttributeOption()
:eav_attribute
Tabelle einfügen / aktualisierenaddAttributeOption()
zum Einfügen / Aktualisieren von OptionswertenDie einzige Hoffnung wäre dann, dass
addAttributeOption()
dereav_attribute
Datensatz aktualisiert werden kann . Es gibt jedoch keinen Code, der dies tut. Die einzigen Tabellen, auf die mit dieser Methode zugegriffen wird, sindeav_attribute_option
undeav_attribute_option_value
.Es ist daher erforderlich,
getAttribute()
nach dem erstenaddAttribute()
Aufruf aufzurufen, die Attributoptions-ID abzurufen und dann aufzurufenupdateAttribute()
.Bearbeiten:
Nach der früheren Antwort konnte ich nicht anders, als meine Antwort anhand des vorhandenen Codes zu überprüfen. Schließlich
catalog_product
haben wir für Entitäten dank des Attributs CRUD GUI einen schönen MVC-Ablauf. Und da\Mage_Adminhtml_Catalog_Product_AttributeController::saveAction()
sah ich, dass das Attributmodell kurz vor dem Speichern mit den folgenden Daten festgelegt wurde:Beachten Sie, dass der
default
Wert des Attributs Verweise auf dievalue
Schlüssel enthält. Wenn Sie ein wenig graben, landen Sie bei\Mage_Eav_Model_Resource_Entity_Attribute::_saveOption()
, was von der_afterSave()
Methode dieser Ressource aufgerufen wird - genau wie Sie es erwarten würden, da wir eineneav_attribute
Datensatz zum Aktualisieren benötigen . Sie können sogar sehen, wie Multiselect- und Select-Standardeinstellungen unmittelbar vor dem endgültigen Update an derselben Stelle behandelt werden:Eine andere Alternative besteht darin, direkt mit dem Ressourcenmodell zu arbeiten.
quelle
updateAttribute
Ansatz gewählt, aber es sollte einen Weg geben, dies elegant zu tun. Vielleicht in Magento 2. oh ... und nette Erklärung.Im Installationsprogramm Dies sind die beiden Zeilen nach addAttribute, die erläutert werden, um Standard hinzuzufügen:
attribute_code: ist Ihr Attributcode default_value1: ist Ihr entsprechender Wert, getrennt durch,
quelle