1

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

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

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

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

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

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

谢谢!

4

1 回答 1

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:是您的块唯一名称。
  • 兄弟名称:是一个块唯一名称,它已经存在于插入目标块中。
  • after: 是块位置的布尔标识符。如果等于 1,则该块将被添加到兄弟名称之后,如果兄弟名称为空,则该块将添加到子列表的底部
  • alias:是你的块的别名,如果它是空的,blockName 将被使用。
于 2016-02-08T08:38:07.110 回答