在/app/design/frontend/default/[theme]/template/catalog/product/list.phtml中,您有以下代码片段循环显示 $ _ productCollection 内容。
<?php $_collectionSize = $_productCollection->count() ?>
<?php $_columnCount = $this->getColumnCount(); ?>
<?php $i=0; foreach ($_productCollection as $_product): ?>
...
<?php endif; ?>
我想知道的是如何按产品类型排序$ _productCollection。 最终我想要的是首先展示可配置产品,然后展示简单产品。
非常感谢帮助。
干杯!
答案 0 :(得分:2)
使类别视图中的产品集合如此难以定制的一个原因是工具栏,分层导航,实际列表显示之间的耦合,甚至与Mage_Review
模块之间的耦合,显式加载在事件观察者中收集!
首先,您似乎可以使用典型的集合实用程序(例如addAttributeToSort()
)来添加条件,但您会发现这在模板级别不起作用,因为集合数据是已加载。我猜测名为getLoadedProductCollection()
的集合getter方法是来自核心团队的提示。
Magento集合的延迟加载实现是这样的,一旦它们被load()
(直接或间接),它们将不会重新加载(即与数据库进行交易)而不明确被强制这样做。 / p>
因此,您需要在加载前在集合上设置排序参数。通过getLoadedProductCollection()
方法进行跟踪可快速获得Mage_Catalog_Block_Product_List::_getProductCollection()
方法,该方法是块确定它是否在产品页面上(通过检查注册表,yuck)。通过调用堆栈跟踪集合的状态,可以确定在块的_beforeToHtml()
方法之前它没有被加载。如果您要从输出中追溯,您可以看到Mage_Review观察者显式加载了该集合,该观察者使用了catalog_block_product_list_collection
事件(请参阅Mage_Review_Model_Observer::catalogBlockProductCollectionBeforeToHtml()
)。这给出了一个起点和终点。
我希望以后能有一个解决方案。