Quelle est la bonne façon / approche pour modifier un modèle Magento?

15

Veuillez me suggérer la bonne approche, je souhaite personnaliser la page "EMAIL to Friend" dans une fenêtre pop-up, lorsque l'utilisateur clique sur le bouton (envoyer ce produit par e-mail). En activant l'indicateur de modèle, j'ai découvert que le bouton est rendu avec

frontend / rwd / default / template / catalogue / product / view / sharing.phtml

Et le fichier de mise en page correspondant est catalog.xml(dans frontend / rwd / default / layout)

J'ai donc créé un local.xmldans le même dossier où catalog.xmlexistent avec le code suivant (juste que j'ai donné à la test.phtmlplace de sharing.phtml, juste pour 'Debug')

<?xml version="1.0"?>
<layout version="0.1.0">
    <default>

        <catalog-product-view>
            <reference name="content">
                <block type="catalog/product_view" name="product.info" template="catalog/product/view.phtml">
                    <block type="catalog/product_view" name="product.info.sharing" as="sharing" template="catalog/product/view/test.phtml"/>
                </block>
            </reference>
        </catalog-product-view>

    </default>
</layout>

Mais rien ne se passe, je veux dire comment je peux changer (Ecraser) la conception par défaut du thème, sans modifier existants xmlet les phtmlfichiers?

Dimag Kharab
la source

Réponses:

10

C'est ce que vous devez mettre dans votre local.xmlfichier.

<?xml version="1.0"?>
<layout version="0.1.0">
    <catalog_product_view>
        <reference name="product.info.sharing">
            <action method="setTemplate">
                <template>catalog/product/view/test.phtml</template>
            </action>
        </reference>
    </catalog_product_view>
</layout>

Erreurs que vous avez commises

  • Vous avez utilisé deux poignées de mise à jour de mise en page : defaultet catalog-product-view. C'est faux. Vous n'avez besoin que d'une poignée de mise à jour de mise en page. Le bon que vous devriez utiliser ici estcatalog_product_view

  • Il catalog-product-viewest donc inconnu pour magento. Le nom propre estcatalog_product_view

  • Étant donné que le bloc de partage est déjà défini via catalog.xml, vous devez maintenant référencer ce bloc, puis modifier le modèle en ajoutant une action setTemplate. C'est ce que fait le script ci-dessus.

J'espère que vous aurez l'idée

Rajeev K Tomy
la source
J'ai utilisé votre fichier local.xml, toujours en affichant celui existant (j'ai créé un test.phtml) dans le dossier spécifié
Dimag Kharab
avez-vous vidé votre cache? cela est censé fonctionner, si vous avez tout fait correctement.
Rajeev K Tomy
la mise en cache yup est désactivée dans mon cas et j'ai également réindexé (je suppose que ce n'était pas nécessaire)
Dimag Kharab
ajoutez-le <reference name="content"><block type="core/template" name="test.block" template="catalog/product/view/test.phtml" /></reference>directement sous le nœud <catalog_product_view>. et vérifiez si le contenu du fichier test.phtml est disponible dans la partie inférieure de la page d'affichage du produit
Rajeev K Tomy
Pas de chance encore
Dimag Kharab
10

Je vais essayer de donner une réponse générale.

Comment changer de modèle

Dans votre thème, vous pouvez remplacer tous les phtmlfichiers du thème par défaut ou du thème parent. Copiez le fichier d'origine dans app/design/frontend/[package]/[theme]/template/[path/to/phtml]et apportez vos modifications.

Si vous n'avez pas encore de thème personnalisé spécifique au projet, par exemple parce que vous venez d'acheter un thème, assurez-vous d'en créer un sur

app/design/frontend/[original-package]/[project-name]

Il héritera de [original-package]/[default], vous n'avez pas besoin de tout copier par défaut, juste les fichiers où vous devez apporter des modifications.

Modifications spécifiques au module

Une alternative à la substitution du phtmlfichier consiste à modifier le chemin du modèle. Cela peut généralement être fait en XML de mise en page comme ceci:

<reference name="the-block-name">
    <action method="setTemplate"><name>path/to/new/template.phtml</name></action>
</reference>

Mais cela est destiné à être utilisé par les modules qui ont besoin de changer de modèle, pas pour des changements spécifiques au thème. Le nouveau modèle devrait être base/defaultalors.

Comment utiliser local.xml / theme.xml

Le local.xmlfichier doit se trouver dans le répertoire du thème réel que vous utilisez, c'est-à-dire

app/design/frontend/[package]/[theme]/layout

Plusieurs local.xmlfichiers de la hiérarchie de secours ne sont pas pris en compte. Le premier d'entre eux qui peut être trouvé, est utilisé:

app/design/frontend/[package]/[theme]/layout/local.xml
app/design/frontend/[package]/default/layout/local.xml
app/design/frontend/base/default/layout/local.xml

(en supposant une hiérarchie par défaut et aucune hiérarchie définie personnalisée)

Comment apporter des modifications

Vous ne devriez avoir que des modifications dans local.xml, pas répéter les définitions qui sont déjà dans les fichiers XML d'origine. Cela signifie également, évitez de copier des fichiers XML à partir du thème par défaut pour apporter des modifications directement dans les fichiers. Gardez le layoutrépertoire de votre thème propre!

Les éléments typiques de local.xmlsont <remove>de supprimer entièrement les blocs existants <action method="unsetChild">et <action method="append">de déplacer un bloc d'un parent à un autre, ou d'appeler toute autre méthode sur des blocs existants pour modifier leur comportement.

Magento 1.9

À partir de Magento 1.9, la meilleure pratique consiste à ne pas utiliser layout/local.xmlces modifications, maisetc/theme.xml

En bref, vous pouvez ajouter une mise à jour de la mise en page dans app / design / frontend / yourpackage / etc / theme.xml. L'avantage est que vous avez le contrôle sur l'ordre de chargement de vos mises à jour de mise en page. Avant que Magento 1.9 local.xml ne soit toujours chargé en dernier, il était impossible d'exécuter des directives de mise en page après.

Je n'utilise plus local.xml pour les modifications de thème spécifiques au projet. Je pense que local.xml est juste utilisé pour des raisons de compatibilité descendante (en 1.9 et au-dessus) car il n'y a plus aucun intérêt à l'utiliser. Local.xml est également éliminé dans Magento 2 ( https://github.com/magento/magento2/issues/1037 ).

Source: https://erfanimani.com/dont-use-local-xml/

Fabian Schmengler
la source