web-dev-qa-db-ja.com

local.xmlファイルを介してブロックの順序を変更する

Local.xmlファイルを介して既存のブロックの順序を変更することは可能ですか? afterまたはbefore属性を使用してブロックの順序を変更できることはわかっていますが、既存のブロックの属性をどのように変更できますか。

たとえば、左側の列のニュースレター購読ブロックの下に階層型ナビゲーションブロックを配置する場合、どうすればよいですか?

22
Pieter Hoste

小さなトリックを実行し、子ブロックを削除して、新しい位置に追加する必要があります。

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

このLayout XML命令は、必要なことを実行します。 insertメソッドのパラメーターの短いリファレンスを見てください。

  • blockNameは、レイアウト全体でのブロックの一意の名前です。たとえば、product.viewです。
  • siblingNameはブロックの一意の名前で、挿入ターゲットブロックに既に存在し、ブロックの配置に使用されます。空白のままにすると、上部または下部に表示されます。
  • afterは、ブロック位置のブール識別子です。 1と等しい場合、ブロックはsiblingNameの後に、またはsiblingNameが空の場合は子リストの一番下に追加されます
  • aliasはブロックのエイリアスです。空の場合、ブロックの名前が使用されます。

いくつかの例:

最近表示した商品の後にカートのサイドバーブロックを移動

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

最近表示した商品の前にカートのサイドバーブロックを移動

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

右側のブロックの最後にあるカートのサイドバーブロックを移動

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

左側のブロックの上部にあるカートのサイドバーブロックを移動します

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

Magentoでの作業をお楽しみください!

64
Ivan Chepurnyi

受け入れられた答えは私にとってはうまくいきませんでした(EE1.14)がそれに近いもの、これ:

<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