Ich versuche, Optionen für Größen- und Farbattribute in meinem Importmodul hinzuzufügen, aber ich weiß nicht, wie ...:
private function addOption($attributeCode, $value)
{
$ob = $this->_objectManager;
/* @var $m \Magento\Eav\Model\Entity\Attribute\OptionManagement */
$m = $this->optionManagement;
/* @var $option \Magento\Eav\Model\Entity\Attribute\Option */
$option = $this->attributeOption;
$option->setLabel($value);
$option->setValue($value);
$m->add(\Magento\Catalog\Api\Data\ProductAttributeInterface::ENTITY_TYPE_CODE,
$attributeCode,
$option);
Dieser Bericht enthält einen Fehler. (Ich habe die Ausnahmeberichterstattung OptionMaganger.php
unter Ausnahme-> Nachricht geändert. )
Attributgröße kann nicht gespeichert werden Hinweis: Nicht definierter Index: Löschen in /var/www/html/magento2/vendor/magento/module-swatches/Model/Plugin/EavAttribute.php in Zeile 177
- Das OptionManagement und die Option stammen von
_contstructor
- Mit OptionManagement kann ich die vorhandenen Elemente abrufen, sollte also in Ordnung sein.
setLabel()
und setValue()
sind voreingestellt, aber ich habe versucht, setData , load option instance und pass by OptionManagement->getItems
zu add (...) "again", aber der Fehler besteht immer noch ...
Irgendeine Idee, wie kann ich EAV-Optionen (Farbfelder?) Während des Importvorgangs anhängen? (nicht im Modul-Setup)
Update:
Auf andere Weise kann ich Option hinzufügen:
$attributeCode = 137; /* on size, 90 on color ... */
$languageValues[0]='Admin Label';
$languageValues[1]='Default Store Label - XXXXL';
$ob = $this->_objectManager;
private function addOption($attributeCode,$languageValues){
$ob = $this->_objectManager;
/* @var $attr \Magento\Eav\Model\Entity\Attribute */
$attr = $ob->create('\Magento\Eav\Model\Entity\Attribute');
$attr->load($attributeCode);
$option = [];
$option['value'][$languageValues[0]] = $languageValues;
$attr->addData(array('option' => $option));
$attr->save();
}
Auf diese Weise kann Magento2 eine Option zum Attributieren speichern, aber ich weiß nicht, was der "offizielle" Weg ist :)
quelle
Antworten:
erklären:
Konstrukteur :
Methode ausführen:
quelle
Auf andere Weise kann ich Option hinzufügen:
Auf diese Weise kann Magento2 eine Option zum Attributieren speichern, aber ich weiß nicht, was der "offizielle" Weg ist.
quelle
Scheint ein Validierungsproblem zu sein. Der Löschschlüssel für Daten stammt aus dem Formular im Backend. Fügen Sie also auf diese Weise einen leeren Löschschlüssel hinzu:
$option->setData('delete','');
Es könnte funktionieren.
quelle
Am Ende habe ich die gesamte Antwort mit den von Ryan H. vorgeschlagenen ObjectFactory-Methoden umgeschrieben.
Am Ende war es eine Helper-Klasse, die einige Attribute verwendete, die ich für das Kundenobjekt erstellt hatte. Die Idee ist jedoch, wie EAV + ObjectFactories zum Bearbeiten von Attributoptionen verwendet werden kann
quelle
UPDATE 2016-09-11: Wie Quickshiftin betonte, funktioniert diese Lösung nicht für M2.1 +. Der Versuch, die
CategorySetup
Klasse außerhalb von Setup in Abhängigkeit zu injizieren , führt zu einem schwerwiegenden Fehler. Eine robustere Lösung finden Sie hier: /magento//a/103951/1905Verwenden Sie dazu die
\Magento\Catalog\Setup\CategorySetup
Klasse. Es enthält eineaddAttributeOption()
Methode, die genauso funktioniert wieeav/entity_setup::addAttributeOption()
in 1.x. Es gibt noch einige andere Attributmethoden, die ebenfalls hilfreich sein könnten.Sie können die Abhängigkeitsinjektion verwenden, um diese Klasse jederzeit abzurufen, auch außerhalb eines Installationsprozesses.
Speziell:
Falls gewünscht, können Sie die
attributeRepository
Klasse entfernen undgetAttribute()
direkt weiter verwendencategorySetup
. Sie müssten nur jedes Mal die Entitätstyp-ID angeben.quelle
CategorySetupFactory
, um einCategorySetup
von einem zu instanziierenConsole\Command
, aber wenn ich$factory->setup()
einen fatalen FehlerPHP Fatal error: Uncaught TypeError: Argument 1 passed to Magento\Setup\Module\DataSetup::__construct() must be an instance of Magento\Framework\Module\Setup\Context, instance of Magento\Framework\ObjectManager\ObjectManager given
Magento 2 Spezifische Attributoption hinzufügen Programmgesteuerter Wert.
Führen Sie dieses Skript im Stammverzeichnis von Magento nach der URL aus.
quelle