在我们的 Magento 商店中,我们有“特色”页面,这些页面基本上是产品集合,其中设置了某个“特色”属性。为此,我使用 CMS 页面以及带有自定义块类的自定义模块来显示产品。这很好用。我现在正在为这些页面添加 Magento 的分层导航。事实证明,这比我想象的更困难,主要是因为分层导航依赖于current_category。我已经能够通过创建我自己的分层导航块和我自己的 Layer 类来解决这个问题。我现在让它工作了,但是我遇到了块内容呈现顺序的问题。
Magento 渲染布局时,似乎是先渲染 Left 结构块,其中包含类别树和分层导航块。不幸的是,我自定义的分层导航块取决于内容块中的产品列表。渲染分层导航块时,尚未创建过滤的产品集合。这会导致可过滤属性的空列表,因此分层导航块仅显示类别列表。
我已经能够通过在我的布局 XML 文件中移动块定义来解决该问题,因此它发生在创建内容块之后。虽然这可行,但这并不是我所希望的优雅解决方案。我创建了一个自定义布局句柄,用于处理所有“特色”页面的所有共享块。对于每个“特色”页面,我都会调用<update handle="featured_default">
. 最初,我尝试将分层导航块定义放在features_default句柄中,但这导致了上述问题(即产品集合尚未准备好)。通过将它放在它正确呈现的产品列表块定义之后。但这意味着我必须把它放在所有的布局更新中特色页面。正如我所说,这不是我希望的优雅解决方案。
所以这让我想到了我的问题……如果你还在我身边。是否可以控制块的渲染顺序?我知道您可以使用块定义中的before和after属性来控制块的放置,但这只能控制它们在父块中的位置。我想做的是在渲染内容块之后渲染分层导航块的输出。这可能吗?
一个后续问题是:我这样做对吗?鉴于我要完成的工作,是否有更好的解决方案来解决这个问题?我在网上找到的大部分关于将分层导航块放在 CMS 页面上的信息都向您展示了如何设置类别 ID 以与分层导航块一起使用,但这不是我所拥有的。这些产品可以属于不同的类别。它们唯一的共同点是它们的特定属性值设置为true。
很抱歉这个冗长的问题。我希望这是有道理的。如果您需要查看我的任何代码,请告诉我,我会发布您需要的任何内容。
谢谢!