如何控制Magento块渲染顺序(不是位置)

时间:2012-09-28 17:59:53

标签: php magento layout block magento-1.5

在我们的Magento商店,我们有“特色”页面,基本上是产品系列,其中设置了某个“特色”属性。我使用CMS页面以及带有自定义块类的自定义模块来显示产品。这非常有效。我现在正在努力将Magento的分层导航添加到这些页面。事实证明,这更加困难,主要是因为分层导航依赖于 current_category 。我已经能够通过创建自己的分层导航块和我自己的Layer类来解决这个问题。我现在已经开始工作,但是我遇到了渲染块内容的顺序问题。

当Magento渲染布局时,它似乎首先渲染左结构块,其中包含类别树和分层导航块。不幸的是,我的自定义分层导航块取决于内容块中的产品列表。呈现分层导航块时,尚未创建过滤的产品集合。这会产生一个空的可过滤属性列表,因此分层导航块只显示类别列表。

我已经能够通过在布局XML文件中移动块定义来解决这个问题,因此它会在创建内容块之后发生。虽然这有效,但它并不是我希望的优雅解决方案。我有一个自定义布局句柄,我创建了处理所有“特色”页面的所有共享块。对于每个“精选”页面,我都会调用<update handle="featured_default">。最初,我尝试做的是将我的分层导航块定义放在 featured_default 句柄中,但这导致上面的问题(即产品集合尚未准备好)。通过将 AFTER 放在产品列表块定义中,它可以正确呈现。但这意味着我必须将它放在所有特色页面的 EVERY 布局更新中。正如我所说,不是我希望的优雅解决方案。

所以这让我想到了我的问题...如果你还和我在一起。是否可以控制块的渲染顺序?我知道您可以使用块定义中的之前之后属性来控制块的放置,但这只能控制它们在父级中的位置块。我想要做的是渲染分层导航块的输出 AFTER 已经渲染了内容块。这可能吗?

后续问题是:我这样做了吗?鉴于我正在努力实现的目标,是否有更好的解决方案来解决这个问题?我在网上找到的关于将分层导航块放在CMS页面上的大部分信息都向您展示了如何设置用于分层导航块的类别ID,但这不是我所拥有的。产品可以是不同的类别。它们唯一的共同点是它们的特定属性值设置为 true

抱歉这个冗长的问题。我希望这是有道理的。如果您需要查看我的任何代码,请告诉我,我会发布您需要的任何内容。

谢谢!

1 个答案:

答案 0 :(得分:0)

在Magento中,before="child.block.name"after="child.block.name"属性用于定义块的顺序。如果未指定这些属性,则块将按Magento读取它们的顺序呈现。

例如

从左向右移动购物车侧边栏:

<reference name="left">
    <action method="unsetChild"><alias>cart_sidebar</alias></action>
</reference>
<reference name="right">
    <action method="insert"><blockName>cart_sidebar</blockName></action>
</reference>
  • blockName:是您的块唯一名称。
  • siblingName:是一个块唯一名称,已存在于 插入目标块。
  • after:是块位置的布尔标识符。如果等于1, 然后块将在siblingName之后或在底部添加 如果siblingName为空,则子列表
  • 别名:是块的别名,如果为空,则为blockName 使用。