Comment écraser un modèle via un module dans Magento2

9

Je crée un module et je veux écraser le modèle app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/edit/options.phtml.

Est-ce possible dans un module (pas un thème)

Malheureusement, il ne semble pas très facile de changer le nom du module via XML de mise en page, car il est codé en dur dans https://github.com/magento/magento2/blob/develop/app/code/Magento/Catalog/Block /Adminhtml/Product/Edit/Tab/Options.php#L21

Alex
la source
Veuillez vous référer à ce lien pour la réponse magento.stackexchange.com/questions/76434/…
Divya Muralidharan
Veuillez vous référer à ce lien pour répondre magento.stackexchange.com/questions/76434/…
Divya Muralidharan

Réponses:

10

Ajoutez le dossier de présentation de votre fichier de module [Fournisseur] / [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>

Vous devez également ajouter au module xml cette ligne, pour charger vos mises en page après le catalogue

<sequence>
        <module name="Magento_Catalog"/>
</sequence>
KAndy
la source
D'où tenez-vous le nom admin.product.options?
Alex
Recherchez simplement \ Magento \ Catalog \ Block \ Adminhtml \ Product \ Edit \ Tab \ Options par les fichiers de mise en page et découvrez la déclaration dans Magento / Catalogue / view / adminhtml / layout / catalog_product_options.xml
KAndy
1
N'est-ce pas Vendor_ModuleName::product_options.phtml?
Giel Berkers
Oui, merci pour le point
KAndy
2
Cette solution ne fonctionne que si le modèle d'origine a été défini dans le fichier Block.php. Si le modèle d'origine est défini sur le layout.xml, cette solution ne fonctionnera pas. Une meilleure approche consiste à toujours utiliser <action method="setTemplate">au lieu de <arguments>. Cette solution fonctionne dans tous les cas.
Jalogut
3
  1. Créez le fichier de mise en page correspondant dans votre module:

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

  1. Définissez la configuration de votre modèle personnalisé
<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>

REMARQUE: il est très important d'utiliser à la <action method="setTemplate">place de <arguments>. <arguments>ne fonctionnera que si le bloc n'a pas d'autre modèle spécifié dans la déclaration xml. Dans tous les autres cas, vous devez <action method="setTemplate">remplacer le modèle existant. Il est préférable de l'utiliser <action method="setTemplate">car il fonctionne toujours.

Jalogut
la source
0

Oui, vous pouvez remplacer les fichiers modèles de l'application / du code de votre module personnalisé. Cependant, gardez à l'esprit que dans le concept d'héritage de Magento, les fichiers (modèles, mises en page, fichiers statiques) de l'application / conception les remplacent dans l'application / le code. Tout comme le thème enfant remplace le thème parent.

Donc, je considère qu'il est préférable de créer un thème personnalisé pour votre module personnalisé et d'y ajouter tous vos fichiers phtml, xml, css, js, police et image dans app / design.

Iveta Allogenes
la source