¿Cómo puedo cambiar un modal existente en Magento 2?

36

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 sortOrder problema relacionado, ya que lo configuré de esa manera. los 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 sortOrdera 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?
Giel Berkers
fuente
1
Esa es la única forma hasta ahora de personalizar un tipo de componente Ui como este. Los modificadores PHP.
Toan Nguyen
2
@Giel Berkers Tu pregunta es buena pero desafortunadamente no sé cómo responderla. Afortunadamente, tengo suficiente reputación como para recompensar tu pregunta y atraer a alguien que sepa responderla. Mi tipo.
Farewell Stack Exchange

Respuestas:

1

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.

Naresh Prajapati
fuente
0

Puede configurar <sequence>en module.xml de CatalogInventory módulo. Después de eso, puede crear product_form.xml en

aplicación / código / Your / Module /view/adminhtml/ui_component/product_form.xml

Con 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 .

AleksLi
fuente