Php 如何控制Magento块渲染顺序(非位置)

Php 如何控制Magento块渲染顺序(非位置),php,magento,layout,block,magento-1.5,Php,Magento,Layout,Block,Magento 1.5,在我们的Magento商店中,我们的特色页面基本上是产品集合,其中设置了特定的特色属性。我使用CMS页面以及带有自定义块类的自定义模块来显示产品。这很有效。我现在正在为这些页面添加Magento的分层导航。事实证明,这比我想象的更困难,主要是因为分层导航依赖于当前的_类别。我已经能够通过创建自己的分层导航块和层类来解决这个问题。我现在可以使用了,但是我遇到了块内容呈现顺序的问题 当Magento渲染布局时,它似乎首先渲染左侧结构块,其中包含类别树和分层导航块。不幸的是,我的自定义分层导航块依赖于

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

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

我已经能够通过移动布局XML文件中的块定义来解决这个问题,以便在创建内容块之后发生。虽然这是可行的,但这并不是我所希望的优雅解决方案。我创建了一个自定义布局句柄,用于处理所有特色页面的所有共享块。对于每个特色页面,我都会打电话。最初,我尝试将分层导航块定义放在默认句柄中,但这导致了上述问题,即产品集合尚未准备就绪。通过将其放在产品列表块定义之后,它将正确呈现。但这意味着我必须把它放在所有特色页面的每个布局更新中。正如我所说,这不是我所希望的优雅的解决方案

这就引出了我的问题…如果你还和我在一起的话。是否可以控制块的渲染顺序?我知道可以使用块定义中的before和after属性来控制块的放置,但这仅控制它们在父块中的位置。我要做的是在呈现内容块之后呈现分层导航块的输出。这可能吗

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

对不起,这个冗长的问题。我希望这是有道理的。如果你需要查看我的任何代码,请让我知道,我会发布你需要的任何东西

谢谢

在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为空,则显示子项列表 别名:是块的别名,如果为空,则块名将为空 被使用。
我没有答案,但我觉得如果块顺序有影响,那么视图层中有太多的业务逻辑,应该在模型层或控制器层中。仅仅因为其他开发人员就是这样做的,这并不意味着一切都会好起来。你很可能是对的,钟表匠。我对Magento比较陌生,早期编写的许多代码都需要大修。我的特色模块在视图方面确实很重要。当在布局或CMS页面上配置块时,您将传递一个参数,该参数指示过滤产品集合的属性。正因为如此,我知道生成产品集合的唯一方法是在块实例化期间,我猜是视图层。如果你有更好的处理方法的建议,我洗耳恭听: