通过 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 文件更改块的顺序的主要内容,如果未能解决你的问题,请参考以下文章