Я пытаюсь добавить параметры для атрибутов размера и цвета в моём модуле импортера, но не знаю как:
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);
Этот отчет об ошибке (я изменил исключение отчетов о OptionMaganger.php
к Exception-> сообщение )
Невозможно сохранить размер атрибута. Примечание: неопределенный индекс: удалить в /var/www/html/magento2/vendor/magento/module-swatches/Model/Plugin/EavAttribute.php в строке 177.
- OptionManagement и Option происходят из
_contstructor
- С OptionManagement я могу получить существующие элементы, так что должно быть в порядке ..
setLabel()
и setValue()
по умолчанию, но я попробовал setData , загрузить экземпляр опции и пройти, OptionManagement->getItems
чтобы добавить (...) "снова", но ошибка все еще существует ...
Любая идея, как я могу добавить параметры EAV (образцы?) В процессе импорта? (не в модульной настройке)
Обновить :
Другой способ я могу добавить вариант:
$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();
}
Таким образом, Magento2 может сохранить опцию для атрибута, но я не знаю, что такое «официальный» способ :)
источник
Ответы:
заявляет:
конструктор:
выполнить метод:
источник
Другой способ я могу добавить вариант:
Таким образом, Magento2 может сохранить опцию для атрибута, но я не знаю, что такое «официальный» способ.
источник
Кажется, проблема с проверкой. Ключ удаления данных поступает из формы в бэкэнде, поэтому попробуйте добавить пустой ключ удаления следующим образом:
$option->setData('delete','');
Это может работать.
источник
В итоге я переписал весь ответ, используя методы ObjectFactory, предложенные Райаном Х.
В итоге он стал вспомогательным классом, который использовал некоторые атрибуты, которые я создал для объекта customer, но идея заключается в том, как использовать EAV + ObjectFactories для управления параметрами атрибута.
источник
ОБНОВЛЕНИЕ 2016-09-11: Как указал quickshiftin, это решение не работает для M2.1 +. Попытка внедрить
CategorySetup
класс с зависимостями вне установки приведет к фатальной ошибке. Смотрите здесь для более надежного решения: /magento//a/103951/1905Используйте
\Magento\Catalog\Setup\CategorySetup
класс для этого. Он включаетaddAttributeOption()
метод, который работает точно так же, какeav/entity_setup::addAttributeOption()
в 1.x. Там также могут быть полезны некоторые другие методы атрибутов.Вы можете использовать внедрение зависимостей, чтобы получить этот класс в любое время, даже вне процесса установки.
В частности:
При желании вы можете исключить
attributeRepository
класс и использоватьgetAttribute()
напрямуюcategorySetup
. Вам просто нужно будет каждый раз включать идентификатор типа объекта.источник
CategorySetupFactory
для создания экземпляраCategorySetup
из aConsole\Command
, однако, когда я звоню,$factory->setup()
происходит фатальная ошибка: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 добавить параметр Определенный атрибут Значение программно.
Запустите этот скрипт в корневом каталоге magento после URL.
источник