我需要通过布局更新引用调用将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>
有可能做我想要的吗?之前/之后是否仅适用于同一参考中的块?
答案 0 :(得分:5)
布局更新按布局更新句柄的顺序处理。您的 块最后添加到内容中,但仅限于default
LUH。其他句柄(catalog_product_view
,catalog_category_layered
等)在此句柄之后处理。
如果你真的需要一个内容页脚,并且想确保它是内容 div中的最后一个内容,你应该将你的块添加到 root default handle
中的节点,并在{{1}之后添加page/
调用,自定义 root 模板(直接位于page/1column.phtml
下,例如getChildHtml('your.block')
)调用。这将确保您的块始终位于内容块的末尾。