Como posso alterar um modal existente no Magento 2?

36

Estou tentando mudar o comportamento de um modal (não modelo) no Magento 2.
O modal em questão é advanced_inventory_modaldeclarado em module-catalog-inventory/view/adminhtml/ui_component/product_form.xml.

Agora eu sei que posso usar um modificador no pool de modificadores de forma de produto:

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

... e use o modifyMeta()método-no meu modificador para manipular a configuração XML, mas por algum motivo, o modal de inventário não está presente nos dados fornecidos aqui.Também não é um sortOrderproblema relacionado, já que eu já defini esse caminho alto.O sortOrderatributo-pode ter algo a ver com isso.

Então, o que dá? Alguém pode me dizer qual é a maneira correta de modificar o conteúdo de um modal existente no Magento 2?

Editar:

Encontrei uma solução ou solução alternativa (ainda não tenho certeza) sobre como alcançar o que estou tentando alcançar. Acontece que, se eu definir sortOrdercomo 10000 , tenho alguns dados no meu modifyMeta()método -a que posso 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
fonte
1
Até agora, é a única maneira de personalizar esse tipo de componente de interface do usuário. Os modificadores PHP.
Toan Nguyen
2
@ Beriel Giel Sua pergunta é boa, mas infelizmente não sei como respondê-la. Felizmente, tenho reputação suficiente para recompensar sua pergunta e atrair alguém que saiba responder à sua pergunta. Meu tipo.
Farewell Stack Exchange

Respostas:

1

Há duas maneiras:
1. Crie um novo modelo (através da criação de um novo módulo no pool local)
2. Substitua o modelo existente do módulo específico que você deseja.

Naresh Prajapati
fonte
0

Você pode definir <sequence>no module.xml do módulo CatalogInventory . Depois disso, você pode criar product_form.xml em

app / code / Your / Module /view/adminhtml/ui_component/product_form.xml

Com o mesmo caminho que está no CatalogInventory . Isso substituirá a configuração necessária.

Gostaria de fornecer exemplos, mas não sei o que você precisa aqui. PS: você não precisa adicionar outros elementos que não precisa no seu XML . eles serão retirados da configuração xml pai .

AleksLi
fonte