2010-12-10 4 views
22

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

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

ответ

61

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

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

+0

Хотя я знаю, что имя аргументов действия не имеют никакого отношения, вы использовали s/subling/родственный/г в течение :) – Nick 2010-12-11 22:27:42

5

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

<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

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