Come posso cambiare un modale esistente in Magento 2?


36

Sto cercando di cambiare il comportamento di un modale (non modello) in Magento 2.
Il modale in questione è advanced_inventory_modal, dichiarato in module-catalog-inventory/view/adminhtml/ui_component/product_form.xml.

Ora so di poter usare un modificatore nel pool di modificatori di form di prodotto:

<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 uso il modifyMeta()metodo nel mio modificatore per manipolare la configurazione XML, ma per qualche ragione, il modale dell'inventario non è presente nei dati forniti qui.Inoltre, non è un sortOrderproblema correlato poiché ho già impostato il livello più alto.L' sortOrderattributo potrebbe avere qualcosa a che fare con esso.

Quindi cosa dà? Qualcuno può dirmi qual è il modo corretto di modificare il contenuto di un modale esistente in Magento 2?

Modificare:

Ho trovato una soluzione o una soluzione (non ancora sicuro) su come ottenere ciò che sto cercando di ottenere. Si scopre che se ho impostato sortOrdersu 10000 ho alcuni dati nel mio modifyMeta()metodo -a che posso usare:

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?

1
Questo è l'unico modo finora per personalizzare il tipo di componente Ui come questo. I modificatori di PHP.
Toan Nguyen il

2
@Giel Berkers La tua domanda è buona, ma sfortunatamente non so come rispondere. Fortunatamente ho abbastanza reputazione da dare generosità alla tua domanda per attrarre qualcuno che sa rispondere alla tua domanda. Il mio tipo.
Scambio di stack d'addio,

Risposte:


1

Esistono due modi:
1. Creare un nuovo modello (tramite la creazione di un nuovo modulo nel pool locale)
2. Per sostituire il modello esistente del modulo specifico desiderato.


0

È possibile impostare <sequence>in Module.xml di CatalogInventory modulo. Successivamente, puoi creare product_form.xml in

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

Con lo stesso percorso di CatalogInventory . Ciò sostituirà la configurazione richiesta.

Vorrei fornire qualche esempio ma non so di cosa hai bisogno qui. PS non è necessario aggiungere altri elementi non necessari nel proprio XML . saranno presi dalla configurazione XML padre .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.