2010-12-10 63 views
22

Est-il possible de changer l'ordre des blocs déjà 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 peut-on changer ces attributs de blocs existants. Par exemple, si je veux placer le bloc de navigation en couches sous le bloc d'abonnement à la newsletter dans la colonne de gauche, comment est-ce que je ferais cela?changer l'ordre des blocs via le fichier local.xml dans magento

Répondre

61

Vous devez effectuer une petite astuce, enlever le bloc de l'enfant et l'ajouter dans la nouvelle position de:

<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 disposition instruction XML fait ce que vous voulez. Regardez cette courte référence des paramètres pour insert méthode:

  • blockName est votre bloc nom unique à travers la mise en page, product.view par exemple
  • siblingName est un bloc nom unique, qui est existe déjà dans l'insertion bloc cible, 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 égale à 1, le bloc sera ajouté après siblingName ou en bas de la liste des enfants si siblingName est vide
  • alias est l'alias de votre bloc, si elle est vide, le nom du bloc sera utilisé.

Quelques exemples:

Déplacer panier bloc barre latérale après les produits récemment consultés

<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éplacer panier bloc de barre latérale avant que les produits récemment consultés

<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éplacer panier bloc de barre latérale à la fin du bloc droit

<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éplacer panier bloc de barre latérale en haut du bloc 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> 

plaisir à travailler avec Magento!

+0

Même si je suis conscient du fait que le nom des arguments d'action ne sont pas pertinents, vous avez utilisé s/subling/frères et soeurs/g tout au long :) – Nick

+0

@ Nick, oui , seul l'ordre des arguments est important, le nom des arguments n'est pas utilisé dans l'appel de la méthode. –

+0

Nice, cela fonctionne parfaitement. Merci aussi pour les exemples! –

5

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 bulletin.

<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.

0

La réponse acceptée n'a pas fonctionné pour moi (EE1.14), mais quelque chose d'approchant, ceci:

<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>