2012-04-27 70 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