Comment remplacer un fichier de modèle dans la création de module dans Magento2

8

Je veux remplacer:

/opt/lampp/htdocs/magento_composer/vendor/magento/module-catalog/view/frontend/templates/product/view/addtocart.phtml

je l'ai copié et collé dans mon module personnalisé à:

/opt/lampp/htdocs/magento_composer/app/code/Hello/Custom/view/frontend/templates/product/view/addtocart.phtml

Voici mon fichier de mise en page:

<?xml version="1.0"?>
<page layout="1column" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <body>

        <referenceBlock name="product.info.addtocart" template="Hello_Custom::product/view/addtocart.phtml" after="alert.urls">

        </referenceBlock>

    </body>
</page>

à:

/opt/lampp/htdocs/magento_composer/app/code/Hello/Custom/view/frontend/layout/catalog_product_view.xml

module.xml:

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../lib/internal/Magento/Framework/Module/etc/module.xsd">
    <module name="Hello_Custom" setup_version="1.0.0" schema_version="1.0.0">
    </module>
</config>
  • Le module fonctionne pour le monde bonjour simple, donc il est enregistré correctement ...

Le problème est dans le fichier d'indices de chemin d'accès du modèle vient du fournisseur .. mais il ne devrait provenir que de mon module personnalisé (pas du thème)

Narendra.vyas
la source
est la dénomination catalog_product_view.xml est essentielle ou nous pouvons donner n'importe quel nom au fichier. en fait, j'ai besoin d'aide pour
remplacer le
siddhesh la dénomination de ce fichier est absolument essentielle. Il détermine où le fichier de mise en page est chargé. Par exemple default.xmlest chargé sur chaque page mais catalog_product_view.xmln'est chargé que sur l' catalog/product/viewaction.
Jacques

Réponses:

17

vous pouvez essayer avec le code ci-dessous dans le fichier xml,

<?xml version="1.0"?>
<page layout="1column" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <body>
        <referenceContainer name="content">
            <referenceBlock name="product.info.addtocart">
                <action method="setTemplate">
                    <argument name="template" xsi:type="string">Hello_Custom::product/view/addtocart.phtml</argument>
                </action>
            </referenceBlock>
         </referenceContainer>
    </body>
</page>
Rakesh Jesadiya
la source
Oui certainement ..
Narendra.vyas
comment vérifier si le fichier xml de mise en page est utilisé ou non? j'ai essayé d'écrire du xml invalide et ma page était toujours rendue correctement. J'ai donc conclu que mon fichier de mise en page XML n'est pas exécuté, dites-moi comment résoudre ce problème
siddhesh
ou devons-nous exécuter une sorte de commandes après la mise à jour du fichier xml
siddhesh
1
En fait, dans les documents de développement de magento 2, vous pouvez lire "en utilisant l'instruction <action>. Cette méthode n'est pas recommandée , mais peut être utilisée pour ...". Je recommanderais d'utiliser la méthode suggérée sur cette page sous Définir un modèle de bloc . Donc, utiliser l'action pour modifier le modèle n'est pas une bonne solution.
drew7721
10

Il existe trois méthodes disponibles pour remplacer les fichiers de modèle dans Magento

Par exemple: Ici, nous remplaçons le fichier addtocart.phtml pour un produit simple.

Méthode 1:

<referenceContainer name="content">
    <referenceBlock name="product.info.addtocart">
        <action method="setTemplate">
            <argument name="template" xsi:type="string">Vendor_Module::product/view/addtocart.phtml</argument>
        </action>
    </referenceBlock>
</referenceContainer>

Méthode 2:

<referenceContainer name="content">
    <referenceBlock name="product.info.addtocart" template="Vendor_Module::product/view/addtocart.phtml"/>
</referenceContainer>

Méthode 3:

<referenceContainer name="product.info.form.content">
    <block class="Magento\Catalog\Block\Product\View" name="product.info.addtocart" as="addtocart" template="Vendor_Module::product/view/addtocart.phtml"/>
</referenceContainer>
Prince Patel
la source