Подтвердить что ты не робот

Изменить порядок блоков через файл local.xml

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

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

4b9b3361

Ответ 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!

Ответ 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>