2012-04-27 138 views
2

在/app/design/frontend/default/[theme]/template/catalog/product/list.phtml中,您有以下代码段可循环显示$ _productCollection内容。Magento产品列表 - 按产品类型排序(可配置,然后简单)

<?php $_collectionSize = $_productCollection->count() ?> 
<?php $_columnCount = $this->getColumnCount(); ?> 
<?php $i=0; foreach ($_productCollection as $_product): ?> 
... 
<?php endif; ?> 

我想知道的是如何有按产品类型分类的$ _productCollection。 最终我想要的是先配置产品,然后展示简单的产品。

帮助将不胜感激。

干杯!

回答

2

之一,使产品的集合类中的观点的东西这么痛定制的工具栏,分层导航,实际列表显示之间的耦合,甚至与Mage_Review模块,明确加载集合中的事件观察!

起初似乎你可以使用典型的采集工具(例如addAttributeToSort())加入您的条件,但你会发现,这将不会在模板级别工作,因为收集数据已经加载。我猜测集合获取方法被命名为getLoadedProductCollection()是核心团队的暗示。

Magento集合的延迟加载实现是这样的:一旦它们被直接或间接地编辑,它们将不会被重载(即与数据库进行交易)而不会被明确强制这样做。

因此,您需要在加载之前在集合上设置您的订购参数。通过跟踪getLoadedProductCollection()方法可以快速找到Mage_Catalog_Block_Product_List::_getProductCollection()方法,该方法是块确定它是否位于产品页面上(通过检查注册表,yuck)还是不确定。通过调用堆栈跟踪集合的状态,可以确定直到块的_beforeToHtml()方法才加载它。如果要从输出中追溯,则可以看到该集合由Mage_Review观察者显式加载,该观察者消耗了事件catalog_block_product_list_collection(请参阅Mage_Review_Model_Observer::catalogBlockProductCollectionBeforeToHtml())。这给出了一个起点和终点。

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

+0

嘿@benmarks,我真的很感激它。我想这个线程已经加载的集合的问题:http://stackoverflow.com/questions/5280392/magento-load-only-configurable-products。但是它会根据评论提出与克隆方法相关的问题。 – EasyCo 2012-04-28 22:09:34

+0

我似乎终于成功了。我还没有完成深度测试,但我基本上取代了list.phtml中的第一行:'$ _productCollection = $ this-> getLoadedProductCollection()'with'$ _productCollection = $ this-> getLoadedProductCollection() - > clear( ) - > addAttributeToSort('type_id','ASC') - > load();'。这似乎保持了我的分层导航,但通过可配置然后简单的排序。 – EasyCo 2012-04-28 22:41:51

+0

您需要使用工具栏的排序和分页以及评论进行一些测试。我怀疑这两种情况都会出现问题。 – benmarks 2012-04-29 12:21:34

相关问题