【发布时间】:2011-05-23 13:14:18
【问题描述】:
是否可以通过 local.xml 文件更改已经存在的块的顺序? 我知道您可以使用 after 或 before 属性更改块的顺序,但是如何更改现有块的这些属性。
例如,如果我想将分层导航块放在左栏中的时事通讯订阅块下方,我该怎么做?
【问题讨论】:
是否可以通过 local.xml 文件更改已经存在的块的顺序? 我知道您可以使用 after 或 before 属性更改块的顺序,但是如何更改现有块的这些属性。
例如,如果我想将分层导航块放在左栏中的时事通讯订阅块下方,我该怎么做?
【问题讨论】:
您需要执行一个小技巧,删除子块并将其添加到新位置:
<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 合作的乐趣!
【讨论】:
您可以删除以前的分层导航块,并在通讯块之后添加一个新的分层导航块。
<reference name="left">
<remove name="catalog.leftnav" />
<block type="catalog/layer_view" name="catalog.leftnavcustom" after="left.newsletter" template="catalog/layer/view.phtml"/>
</reference>
请注意,我为新块使用自定义名称。
【讨论】:
接受的答案对我不起作用(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>
【讨论】: