Change order of blocks via local.xml file

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

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

3 ответа

Решение

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

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

Эта инструкция Layout 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>
Другие вопросы по тегам