web-dev-qa-db-fra.com

Changer l'ordre des blocs via le fichier local.xml

Est-il possible de changer l'ordre des blocs existants via le fichier local.xml? Je sais que vous pouvez changer l'ordre d'un bloc avec l'attribut after ou before, mais comment changer les attributs des blocs existants .

Par exemple, si je souhaite placer le bloc de navigation en couches sous le bloc d'abonnement à la lettre d'information dans la colonne de gauche, comment procéderais-je?

22
Pieter Hoste

Vous devez effectuer une petite astuce, supprimer le bloc enfant et l'ajouter à la nouvelle position:

<reference name="parent.block.name">
    <action method="unsetChild">
        <alias>child_block_alias</alias>
    </action>
    <action method="insert">
        <blockName>child.block.name</blockName>
        <siblingName>name_of_block</siblingName>
        <after>1</after>
        <alias>child_block_alias</alias>
    </action>
</reference>

Cette instruction Layout XML fait ce que vous voulez. Regardez cette courte référence de paramètres pour la méthode insert:

  • blockName est le nom unique de votre bloc dans la mise en page, product.view par exemple
  • siblingName est un nom unique de bloc, qui existe déjà dans le bloc cible d'insertion, utilisé pour le positionnement de votre bloc. Laissez vide pour l'afficher en haut ou en bas.
  • after est un identifiant booléen de la position du bloc. Si égal à 1, le bloc sera ajouté après siblingName ou au bas de la liste des enfants si siblingName est vide
  • alias est l'alias de votre bloc. S'il est vide, le nom du bloc sera utilisé.

Quelques exemples:

Déplacer le bloc de la barre latérale du panier après les produits récemment vus

<reference name="right">
    <action method="unsetChild">
        <alias>cart_sidebar</alias>
    </action>
    <action method="insert">
        <blockName>cart_sidebar</blockName>
        <siblingName>right.reports.product.viewed</siblingName>
        <after>1</after>
    </action>
</reference>

Déplacez le bloc de la barre latérale du panier avant les produits récemment vus

<reference name="right">
    <action method="unsetChild">
        <alias>cart_sidebar</alias>
    </action>
    <action method="insert">
        <blockName>cart_sidebar</blockName>
        <siblingName>right.reports.product.viewed</siblingName>
        <after>0</after>
    </action>
</reference>

Déplacez le bloc de la barre latérale du chariot à la fin du bloc de droite

<reference name="right">
    <action method="unsetChild">
        <alias>cart_sidebar</alias>
    </action>
    <action method="insert">
        <blockName>cart_sidebar</blockName>
        <siblingName></siblingName>
        <after>1</after>
    </action>
</reference> 

Déplacez le bloc de la barre latérale du chariot en haut du bloc de gauche

<reference name="right">
    <action method="unsetChild">
        <alias>cart_sidebar</alias>
    </action>
</reference>
<reference name="left">
    <action method="insert">
        <blockName>cart_sidebar</blockName>
    </action>
</reference>

Profitez de travailler avec Magento!

64
Ivan Chepurnyi

Vous pouvez supprimer le bloc de navigation en couches précédent et ajouter un nouveau bloc de navigation en couches après le bloc newsletter.

<reference name="left">
 <remove name="catalog.leftnav" />
 <block type="catalog/layer_view" name="catalog.leftnavcustom" after="left.newsletter" template="catalog/layer/view.phtml"/>
</reference>

Notez que j'utilise un nom personnalisé pour le nouveau bloc.

5
jrosell

La réponse acceptée ne fonctionnait pas pour moi (EE1.14) mais quelque chose de proche, celle-ci:

<wishlist_index_index>
    <reference name="customer.wishlist.items">
        <action method="unsetChild">
             <name>customer.wishlist.price</name>
        </action>
        <action method="insert">
            <blockName>customer.wishlist.price</blockName>
            <after>customer.wishlist.qty</after>
        </action>
    </reference>
</wishlist_index_index>
0
OZZIE