Próbuję dodać opcje atrybutów rozmiaru i koloru w moim module importera, ale nie wiem jak ...:
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);
Zgłoszenie błędu (zmodyfikowałem raportowanie wyjątku OptionMaganger.php
do komunikatu Wyjątek-> )
Nie można zapisać rozmiaru atrybutu Uwaga: Niezdefiniowany indeks: usuń w /var/www/html/magento2/vendor/magento/module-swatches/Model/Plugin/EavAttribute.php w linii 177
- OptionManagement i Option pochodzą z
_contstructor
- Dzięki OptionManagement mogę odzyskać istniejące elementy, więc powinno być w porządku ..
setLabel()
i setValue()
są domyślne, ale próbowałem setData , załadowałem instancję opcji i przekazałem, OptionManagement->getItems
aby dodać (...) „ponownie”, ale błąd nadal występuje ...
Masz pomysł, jak mogę dołączyć Opcje EAV (próbki?) Podczas procesu importowania? (nie w konfiguracji modułu)
Aktualizacja :
Innym sposobem mogę dodać opcję:
$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();
}
W ten sposób Magento2 może zapisać opcję atrybutu, ale nie wiem jaki jest „oficjalny” sposób :)
źródło
Odpowiedzi:
ogłosić:
konstruktor:
wykonaj metodę:
źródło
Innym sposobem mogę dodać opcję:
W ten sposób Magento2 może zapisać opcję atrybutu, ale nie wiem jaki jest „oficjalny” sposób.
źródło
Wydaje się, że jest to problem z weryfikacją. Klucz usuwania w danych pochodzi z formularza w wewnętrznej bazie danych, więc spróbuj dodać pusty klucz usuwania w ten sposób:
$option->setData('delete','');
To może działać.
źródło
Skończyłem przepisywanie całej odpowiedzi przy użyciu metod ObjectFactory sugerowanych przez Ryana H.
Ostatecznie była klasą pomocniczą, która wykorzystywała niektóre atrybuty, które utworzyłem na obiekcie klienta, ale istnieje pomysł, jak wykorzystać EAV + ObjectFactories do manipulowania opcjami atrybutów
źródło
AKTUALIZACJA 11.09.2016: Jak wskazano w szybkiej zmianie, to rozwiązanie nie działa dla M2.1 +. Próba wstrzyknięcia zależności
CategorySetup
poza klasę spowoduje błąd krytyczny. Tutaj znajdziesz bardziej niezawodne rozwiązanie: /magento//a/103951/1905Użyj
\Magento\Catalog\Setup\CategorySetup
do tego klasy. ZawieraaddAttributeOption()
metodę, która działa dokładnie tak samo jakeav/entity_setup::addAttributeOption()
w 1.x. Istnieje również kilka innych metod atrybutów, które mogą być pomocne.Możesz użyć wstrzykiwania zależności, aby uzyskać tę klasę w dowolnym momencie, nawet poza procesem instalacji.
Konkretnie:
W razie potrzeby możesz wyeliminować
attributeRepository
klasę i korzystaćgetAttribute()
bezpośrednio z niejcategorySetup
. Wystarczy za każdym razem podać identyfikator typu jednostki.źródło
CategorySetupFactory
do utworzenia wystąpieniaCategorySetup
zConsole\Command
, jednak gdy$factory->setup()
wywołuję błąd krytyczny, pojawia się:PHP 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 dodaj opcję konkretnego atrybutu Wartość programowo.
Uruchom ten skrypt w katalogu głównym magento po adresie URL.
źródło