Estou tentando mudar o comportamento de um modal (não modelo) no Magento 2.
O modal em questão é advanced_inventory_modal
declarado 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 O sortOrder
problema relacionado, já que eu já defini esse caminho alto.sortOrder
atributo-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 sortOrder
como 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?
Respostas:
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.
fonte
Você pode definir
<sequence>
no module.xml do módulo CatalogInventory . Depois disso, você pode criar product_form.xml emCom 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 .
fonte