Come sovrascrivere un modello tramite modulo in Magento2


9

Sto creando un modulo e voglio sovrascrivere il modello app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/edit/options.phtml.

È possibile in un modulo (non un tema)

Sfortunatamente non sembra semplicissimo cambiare il nome del modulo tramite XML di layout, poiché questo è impostato su hard-coded in https://github.com/magento/magento2/blob/develop/app/code/Magento/Catalog/Block /Adminhtml/Product/Edit/Tab/Options.php#L21


Si prega di fare riferimento a questo link per la risposta magento.stackexchange.com/questions/76434/…
Divya

Si prega di fare riferimento a questo link per la risposta magento.stackexchange.com/questions/76434/…
Divya

Risposte:


10

Aggiungi la cartella di layout del tuo file di modulo [Vendor] / [ModuleName] /view/adminhtml/layout/catalog_product_options.xml

<?xml version="1.0"?>
<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/layout_generic.xsd">
    <referenceBlock name="admin.product.options">
        <arguments>
            <argument name="template" xsd:type="string">[Vendor]/[ModuleName]::product_options.phtml</argument>
        </arguments>
    </referenceBlock>
</layout>

Inoltre, è necessario aggiungere al modulo xml questa riga per caricare i layout dopo il catalogo

<sequence>
        <module name="Magento_Catalog"/>
</sequence>

Da dove hai preso il nome admin.product.options?
Alex,

Basta cercare \ Magento \ Catalog \ Block \ Adminhtml \ Product \ Modifica \ Tab \ Opzioni per file di layout e scoprire la dichiarazione in Magento / Catalog / view / adminhtml / layout / catalog_product_options.xml
KAndy,

1
Non dovrebbe essere Vendor_ModuleName::product_options.phtml?
Giel Berkers,

Sì, grazie per il punto
KAndy,

2
Questa soluzione funziona solo se il modello originale è stato impostato nel file Block.php. Se il modello originale è impostato su layout.xml, questa soluzione non funzionerà. Un approccio migliore è usare sempre <action method="setTemplate">invece di <arguments>. Questa soluzione funziona in tutti i casi.
Jalogut,

3
  1. Crea il file di layout corrispondente nel tuo modulo:

[Vendor] / [ModuleName] /view/adminhtml/layout/catalog_product_options.xml

  1. Imposta la configurazione del tuo modello personalizzato
<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/layout_generic.xsd">
    <referenceBlock name="admin.product.options">
        <action method="setTemplate">
            <argument name="template" xsi:type="string">[Vendor]_[ModuleName]::product_options.phtml</argument>
        </action>
    </referenceBlock>
</layout>

NOTA: è molto importante usare al <action method="setTemplate">posto di <arguments>. <arguments>funzionerà solo se il blocco non ha un altro modello specificato nella dichiarazione xml. In tutti gli altri casi, è necessario <action method="setTemplate">sostituire il modello esistente. È meglio usare <action method="setTemplate">perché funziona sempre.


0

Sì, puoi sovrascrivere i file modello dall'app / codice del tuo modulo personalizzato. Tuttavia, tieni presente che nel concetto di eredità di Magento, i file (modelli, layout, file statici) da app / design sovrascrivono gli stessi in app / codice. Proprio come il tema figlio sovrascrive il tema principale.

Quindi, ritengo sia meglio creare un tema personalizzato per il tuo modulo personalizzato e aggiungere tutti i tuoi file phtml, xml, css, js, font e immagine lì in app / design.

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.