Eu tento adicionar opções para atributos de tamanho e cor no módulo de importação, mas não sei como ...:
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);
Isso relata um erro (modifiquei o relatório OptionMaganger.php
de exceção para Exceção-> mensagem )
Não é possível salvar o tamanho do atributo Aviso: Índice indefinido: exclua em /var/www/html/magento2/vendor/magento/module-swatches/Model/Plugin/EavAttribute.php na linha 177
- O OptionManagement e Option vêm de
_contstructor
- Com OptionManagement eu posso recuperar os itens existentes, então tudo bem.
setLabel()
e setValue()
são padrão, mas tentei setData , carregue a instância da opção e passe OptionManagement->getItems
para adicionar (...) "novamente", mas o erro ainda existe ...
Alguma idéia, como posso acrescentar Opções de EAV (amostras?) Durante o processo de importação? (não na configuração do módulo)
Atualização:
Outra maneira de adicionar a opção:
$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();
}
Dessa forma, o Magento2 pode salvar uma opção para atribuir, mas não sei qual é a maneira "oficial" :)
fonte
Respostas:
declarar:
construtor:
execute o método:
fonte
Outra maneira de adicionar a opção:
Dessa forma, o Magento2 pode salvar uma opção para atribuir, mas não sei qual é a maneira "oficial".
fonte
Parece ser um problema de validação. A chave de exclusão nos dados vem do formulário no back-end; portanto, tente adicionar uma chave de exclusão vazia dessa maneira:
$option->setData('delete','');
Poderia funcionar.
fonte
Acabei reescrevendo toda essa resposta usando os métodos ObjectFactory sugeridos por Ryan H.
Acabou sendo uma classe auxiliar que utilizou alguns atributos que eu criei no objeto do cliente, mas a idéia é de como utilizar o EAV + ObjectFactories para manipular opções de atributos
fonte
ATUALIZAÇÃO 11-09-2016: Como o quickshiftin apontou, esta solução não funciona para o M2.1 +. Tentar injetar dependência na
CategorySetup
classe fora da instalação resultará em um erro fatal. Veja aqui uma solução mais robusta: /magento//a/103951/1905Use a
\Magento\Catalog\Setup\CategorySetup
classe para isso. Ele inclui umaddAttributeOption()
método, que funciona exatamente da mesma maneira queeav/entity_setup::addAttributeOption()
no 1.x. Existem alguns outros métodos de atributo que também podem ser úteis.Você pode usar a injeção de dependência para obter essa classe a qualquer momento, mesmo fora de um processo de instalação.
Especificamente:
Se desejar, você pode eliminar a
attributeRepository
classe e usá-lagetAttribute()
diretamentecategorySetup
. Você só precisa incluir o ID do tipo de entidade a cada vez.fonte
CategorySetupFactory
para instanciar umCategorySetup
de umConsole\Command
, no entanto, quando eu chamo$factory->setup()
um erro fatal ocorre: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 add Opção de atributo específico Valor programaticamente.
Execute este script no diretório raiz do magento após o URL.
fonte