Изменить порядок блоков через файл local.xml - PullRequest
22 голосов
/ 10 декабря 2010

Можно ли изменить порядок уже существующих блоков через файл local.xml? Я знаю, что вы можете изменить порядок блоков с атрибутом after или before, но как можно изменить эти атрибуты существующих блоков.

Например, если я хочу разместить многоуровневый блок навигации под блоком подписки на новостную рассылку в левом столбце, как мне это сделать?

Ответы [ 3 ]

64 голосов
/ 10 декабря 2010

Вам нужно выполнить небольшой трюк, удалить дочерний блок и добавить его в новую позицию:

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

5 голосов
/ 27 октября 2011

Вы можете удалить предыдущий многоуровневый блок навигации и добавить новый многоуровневый блок навигации после блока новостной рассылки.

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

Обратите внимание, что я использую произвольное имя для нового блока.

0 голосов
/ 24 февраля 2016

Принятый ответ не работал для меня (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>
...