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

Posted

技术标签:

【中文标题】通过 local.xml 文件更改块的顺序【英文标题】:Change order of blocks via local.xml file 【发布时间】:2011-05-23 13:14:18 【问题描述】:

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

例如,如果我想将分层导航块放在左栏中的时事通讯订阅块下方,我该怎么做?

【问题讨论】:

【参考方案1】:

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

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

此布局 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 合作的乐趣!

【讨论】:

虽然我知道动作参数的名称无关紧要,但您一直使用 s/subling/sibling/g :) @Nick,是的,只有参数的顺序很重要,方法调用中不使用参数的名称。 您好,感谢您分享本教程。但我有一个初学者的问题。如何获得完整的区块列表? @Denys:这应该是它自己的问题。页面使用页面顶部的。【参考方案2】:

您可以删除以前的分层导航块,并在通讯块之后添加一个新的分层导航块。

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

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

【讨论】:

【参考方案3】:

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

【讨论】:

以上是关于通过 local.xml 文件更改块的顺序的主要内容,如果未能解决你的问题,请参考以下文章

css 更改块的顺序

使用滑块更改两个块的宽度比例

更改范围滑块的颜色

QTextEdit更改单个段落/块的字体

更改 plist 文件中的项目顺序

ubuntu更改启动顺序