Estoy tratando de cambiar el comportamiento de un Modal (no Modelo) en Magento 2.
El modal en cuestión es advanced_inventory_modal
, declarado en module-catalog-inventory/view/adminhtml/ui_component/product_form.xml
.
Ahora sé que puedo usar un Modificador en el conjunto de modificadores de forma de producto:
<virtualType name="Magento\Catalog\Ui\DataProvider\Product\Form\Modifier\Pool">
<arguments>
<argument name="modifiers" xsi:type="array">
<item name="hf_quantity" xsi:type="array">
<item name="class" xsi:type="string">Vendor\Module\Ui\DataProvider\Product\Form\Modifier\Quantity</item>
<item name="sortOrder" xsi:type="number">100</item>
</item>
</argument>
</arguments>
</virtualType>
... y use el modifyMeta()
método-en mi modificador para manipular la configuración XML, pero por alguna razón, el modal de inventario no está presente en los datos que se proporcionan aquí.Tampoco es un los sortOrder
problema relacionado, ya que lo configuré de esa manera.sortOrder
atributo podría tener algo que ver con eso.
Entonces, ¿qué da? ¿Alguien puede decirme cuál es la forma correcta de modificar el contenido de un modal existente en Magento 2?
Editar:
Encontré una solución o solución alternativa (aún no estoy seguro) sobre cómo lograr lo que estoy tratando de lograr. Resulta que si configuro sortOrder
a 10000 tengo algunos datos en mi modifyMeta()
método -a que puedo usar:
public function modifyMeta(array $meta)
{
if ($path = $this->arrayManager->findPath('quantity_and_stock_status_qty', $meta, null, 'children')) {
$this->arrayManager->remove(
$path . '/children/qty/arguments/data/config/validation/validate-digits',
$meta
);
}
if ($path = $this->arrayManager->findPath('advanced_inventory_modal', $meta)) {
$meta = $this->arrayManager->merge(
$path . '/children/stock_data/children/qty/arguments/data/config',
$meta,
['validation' => ['validate-digits' => false]]
);
}
return $meta;
}
Note that the `advanced_inventory_modal` node is not yet complete, but my best guess is that the later addition of the modal merges with these settings, but doesn't override it. Could be wrong though, perhaps someone could share some more light on how this mechanism works?
Respuestas:
Hay dos formas:
1. Crear un nuevo modelo (a través de la creación de un nuevo módulo en el grupo local)
2. Para anular el modelo existente del módulo específico que desee.
fuente
Puede configurar
<sequence>
en module.xml de CatalogInventory módulo. Después de eso, puede crear product_form.xml enCon la misma ruta que está en el CatálogoInventario . Esto reemplazará la configuración que necesitabas.
Me gustaría proporcionar algunos ejemplos, pero no sé lo que necesita aquí. PD: no necesita agregar otros elementos que no necesita en su XML . se tomarán de la configuración xml principal .
fuente