Magento产品列表 - 按产品类型排序(可配置然后简单)

时间:2012-04-27 23:09:31

标签: php magento

在/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。 最终我想要的是首先展示可配置产品,然后展示简单产品。

非常感谢帮助。

干杯!

1 个答案:

答案 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())。这给出了一个起点和终点。

我希望以后能有一个解决方案。