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>