Quiero agregar un atributo select / dropdown a una categoría y mostrarlo en el back-end para permitir que el propietario de la tienda lo seleccione. Después de investigar un poco, descubrí lo siguiente:
- Crear un atributo a través de Setupscript
- Inclúyalo a través de la declaración del componente UI
Entonces esto es lo que he hecho:
public function install(ModuleDataSetupInterface $setup, ModuleContextInterface $context)
{
/** @var $eavSetup \Magento\Eav\Setup\EavSetup */
$eavSetup = $this->eavSetupFactory->create(['setup' => $setup]);
$eavSetup->addAttribute(
\Magento\Catalog\Model\Category::ENTITY,
'attribute_code',
[
'type' => 'int',
'label' => 'Top Navigation CMS Block',
'input' => 'select',
'source' => 'Magento\Catalog\Model\Category\Attribute\Source\Page',
'required' => false,
'sort_order' => 10,
'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_STORE,
'group' => 'MyOwnGroup'
]
);
}
ver / adminhtml / ui_component / category_form.xml:
<?xml version="1.0" encoding="UTF-8"?>
<form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Ui:etc/ui_configuration.xsd">
<fieldset name="content">
<field name="attribute_code">
<argument name="data" xsi:type="array">
<item name="config" xsi:type="array">
<item name="sortOrder" xsi:type="number">61</item>
<item name="dataType" xsi:type="string">string</item>
<item name="formElement" xsi:type="string">select</item>
<item name="label" xsi:type="string" translate="true">Top Navigation CMS Block</item>
</item>
</argument>
</field>
</fieldset>
</form>
Pero eso no es suficiente, la clasificación de las pestañas en el backend está mezclada. También se muestra el menú desplegable, pero sin opciones. Entonces descubrí que también tienes que editar Magento\Catalog\Model\Category\DataProvider::getFieldsMap()
. Para hacerlo, tenemos que sobrescribirlo a través de di.xml:
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<preference for="Magento\Catalog\Model\Category\DataProvider" type="Vendor\Module\Model\Category\DataProvider" />
</config>
En el propio proveedor de datos del módulo, debe agregar el atributo en la función. Y luego funciona.
Asi que aqui están mis preguntas:
- No creo que realmente tenga que sobrescribir este proveedor de datos para que funcione, debe haber una mejor manera
- Hay 3 lugares dentro del código donde tiene que declarar el nuevo atributo (script de configuración, componente ui, proveedor de datos), no puedo creer que sea necesaria esta sobrecarga.
- ¿Por qué tiene información redundante para el atributo? Por ejemplo, la etiqueta está dentro de la secuencia de comandos de configuración Y el componente ui donde, como la etiqueta en el backend, se leerá de la declaración del componente ui.
magento2
category
attributes
setup-script
ensayador
fuente
fuente
Respuestas:
Necesita agregar un nodo "opciones" a la configuración del componente ui
tomado de aquí Magento2.1 Categoría desplegable atributo personalizado
fuente
Usé el siguiente código para crear el atributo en InstallData.php .
Y luego creo un archivo category_form.xml
fuente