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

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

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

【问题讨论】:

    标签: magento block


    【解决方案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>
      

      【讨论】:

        猜你喜欢
        • 2019-04-19
        • 1970-01-01
        • 1970-01-01
        • 2021-12-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多