Magento: обновить позицию блока с помощью атрибута before / after из ссылки на макет local.xml - PullRequest
1 голос
/ 12 марта 2012

Мне нужно добавить атрибут before в блок с помощью справочного вызова обновления макета.

Это мой local.xml файл:

<?xml version="1.0"?>
<layout version="0.1.0">
    <default>
        <reference name="content">
            <block type="page/html_wrapper" name="content.footer" as="contentFooter" translate="label" after="-">
                <label>Content Footer</label>
                <action method="setElementId"><value>content-footer</value></action>
                <action method="setElementClass"><value>clear</value></action>
            </block>
        </reference>
    </default>
    <catalog_category_default>
        <reference name="breadcrumbs.container">
            <action method="unsetChild"><name>category.title</name></action>
        </reference>
        <reference name="content">
            <block type="catalog/category_view" name="category.title" template="catalog/category/title.phtml" before="content.footer"/>
        </reference>
    </catalog_category_default>
</layout>

Моя проблема в том, чтоБлок content Я создаю блок content.footer, которому вы можете назначить виджеты в админке.Я использую after="-" в блоке content.footer, поэтому, на мой взгляд, он должен ВСЕГДА помещаться внизу блока контента, но это не так.

Когда вы просматриваете категорию каталога и вставляетеБлок category.products в блоке content отображается под блоком content.footer.Единственный способ заставить его работать, если я переопределю его в своем local.xml и включу все дочерние блоки в category.products, и установлю перед before="content.footer".

Поэтому я подумал, почему я не могу использоватьссылка на category.products в макете catalog_category_default и установка атрибута блока before, я попробовал следующее:

<reference name="category.products">
    <action method="setBefore"><value>content.footer</value></action>
</reference>

, который не имел никакого влияния.

Я также заметилsetAttribute() функция в Mage_Core_Block_Abstract, которая увидела, что это просто оболочка для setData(), но подумала, что я все равно попробую, но ничего:

<reference name="category.products">
    <action method="setAttribute"><key>before</key><value>content.footer</value></action>
</reference>

Можно ли делать то, что я хочу?Применяется ли до / после только к блокам с одинаковыми ссылками?

1 Ответ

5 голосов
/ 12 марта 2012

Обновления макета обрабатываются в порядке маркеров обновления макета. Ваш блок добавляется последним к контенту, но только для default LUH. Другие дескрипторы (catalog_product_view, catalog_category_layered и т. Д.) Обрабатываются после этого дескриптора.

Если вам действительно нужен нижний колонтитул для содержимого везде, и вы хотите убедиться, что это последний элемент внутри содержимого div, вы должны добавить свой блок в узел root в default handle и настройте шаблоны root (непосредственно под page/, например page/1column.phtml), добавив вызов getChildHtml('your.block') после вызова getChildHtml('content'). Это гарантирует, что ваш блок всегда находится сразу в конце блоков контента.

...