通过local.xml文件更改块的顺序

时间:2010-12-10 15:11:14

标签: magento block

是否可以通过local.xml文件更改现有块的顺序? 我知道您可以使用after或before属性更改块的顺序,但是如何更改现有块的这些属性。

例如,如果我想将分层导航块放在左栏中的新闻稿订阅块下面,我该怎么做?

3 个答案:

答案 0 :(得分:64)

你需要执行一个小技巧,删除子块并将其添加到新位置:

<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合作!

答案 1 :(得分:5)

您可以删除之前的分层导航栏,并在简报阻止后添加新的分层导航栏。

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

请注意,我为新块使用自定义名称。

答案 2 :(得分:0)

接受的答案对我不起作用(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>