Magento:使用local.xml布局参考更新块前置/后置属性的块位置

时间:2012-03-12 05:05:35

标签: magento layout themes

我需要通过布局更新引用调用将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 个答案:

答案 0 :(得分:5)

布局更新按布局更新句柄的顺序处理。您的 块最后添加到内容中,但仅限于default LUH。其他句柄(catalog_product_viewcatalog_category_layered等)在此句柄之后处理。

如果你真的需要一个内容页脚,并且想确保它是内容 div中的最后一个内容,你应该将你的块添加到 root default handle中的节点,并在{{1}之后添加page/调用,自定义 root 模板(直接位于page/1column.phtml下,例如getChildHtml('your.block'))调用。这将确保您的块始终位于内容块的末尾。