Intento agregar opciones para los atributos de tamaño y color en mi módulo importador pero no sé cómo ...:
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);
Esto informa un error (modifiqué la excepción que informa OptionMaganger.php
a Excepción-> mensaje )
No se puede guardar el tamaño del atributo Aviso: Índice no definido: eliminar en /var/www/html/magento2/vendor/magento/module-swatches/Model/Plugin/EavAttribute.php en la línea 177
- OptionManagement y Option provienen de
_contstructor
- Con OptionManagement puedo recuperar los elementos existentes, por lo que debería estar bien.
setLabel()
y setValue()
son predeterminados, pero intenté setData , cargar la instancia de opción y pasar OptionManagement->getItems
para agregar (...) "nuevamente", pero el error aún existe ...
Alguna idea, ¿cómo puedo agregar opciones EAV (muestras?) Durante el proceso de importación? (no en configuración de módulo)
Actualización:
De otra manera, puedo agregar la opción:
$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();
}
De esta manera, Magento2 puede guardar una opción para atribuir, pero no sé cuál es la forma "oficial" :)
fuente
Respuestas:
declarar:
constructor
ejecutar método:
fuente
De otra manera, puedo agregar la opción:
De esta manera, Magento2 puede guardar una opción para atribuir, pero no sé cuál es la forma "oficial".
fuente
Parece ser un problema de validación. La clave de eliminación en los datos proviene del formulario en el back-end, así que intente agregar una clave de eliminación vacía de esa manera:
$option->setData('delete','');
Podría funcionar
fuente
Terminé reescribiendo toda esta respuesta usando métodos ObjectFactory sugeridos por Ryan H.
Terminó siendo una clase auxiliar que utilizaba algunos atributos que creé en el objeto del cliente, pero la idea está ahí sobre cómo utilizar EAV + ObjectFactories para manipular las opciones de atributos
fuente
ACTUALIZACIÓN 2016-09-11: Como señaló quickshiftin, esta solución no funciona para M2.1 +. Intentar inyectar dependencia a la
CategorySetup
clase fuera de la configuración le dará un error fatal. Consulte aquí para obtener una solución más sólida: /magento//a/103951/1905Usa la
\Magento\Catalog\Setup\CategorySetup
clase para esto. Incluye unaddAttributeOption()
método, que funciona exactamente de la misma manera queeav/entity_setup::addAttributeOption()
en 1.x. Existen algunos otros métodos de atributos que también pueden ser útiles.Puede usar la inyección de dependencia para obtener esta clase en cualquier momento, incluso fuera de un proceso de configuración.
Específicamente:
Si lo desea, puede eliminar la
attributeRepository
clase y usarlagetAttribute()
directamentecategorySetup
. Solo tendría que incluir el ID de tipo de entidad cada vez.fuente
CategorySetupFactory
para crear una instanciaCategorySetup
de unConsole\Command
, sin embargo, cuando llamo$factory->setup()
ocurre un error fatal: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 agrega la opción de atributo específico Valor mediante programación.
Ejecute este script en el directorio raíz de magento después de url.
fuente