如何在Magento中对已加载的产品集合进行排序?

时间:2015-09-16 18:40:19

标签: sorting magento

我想对已经由

加载的产品集合进行排序
$_productCollection = $this->getLoadedProductCollection();

admin Magento中的默认排序是Style属性

我想首先按Style排序,然后按颜色排序,然后按名称排序。

我试过

$_productCollection->setOrder(array('style', 'color','name'), asc);

以及

$_productCollection->addAttributeToSort('color', Varien_Data_Collection::SORT_ORDER_ASC);
$_productCollection->addAttributeToSort('name', Varien_Data_Collection::SORT_ORDER_ASC);

但无效。

默认排序正常。有人可以帮忙吗?

3 个答案:

答案 0 :(得分:4)

你可以这样做:

$_productCollection = $this->getLoadedProductCollection();

$_productCollection->clear();
$_productCollection->addAttributeToSort('color', Varien_Data_Collection::SORT_ORDER_ASC);

foreach ($_productCollection as $product) {
    // ...
}

这样就强制重新加载集合,然后应用自定义排序。

答案 1 :(得分:0)

您也可以克隆已加载的集合,然后根据需要修改查询。

//克隆当前集合。修改集合的更好方式

$_productCollection = clone $this->getLoadedProductCollection();

//取消设置cuurent calection并添加自定义过滤器。

$_productCollection->clear()
               ->addAttributeToFilter('color', Varien_Data_Collection::SORT_ORDER_ASC)
               ->load();

答案 2 :(得分:0)

这里或其他地方都没有对我有用。无论我尝试什么,它都不会使用“getLoadedProductCollection()”对 /Magento_Catalog/templates/product/list.phtml 进行排序。还有一个奇怪的问题,清除缓存后产品会消失,直到完成重新索引。不知道那里发生了什么,有些不对劲。

所以我让它以下面的hacky方式工作(是的,我知道使用对象管理器不是“最佳实践”,但它是唯一有效的方法!)

$_objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$categoryId = 2;
$category = $_objectManager->create('Magento\Catalog\Model\Category')->load($categoryId);
$productCollection = $_objectManager->create('Magento\Catalog\Model\ResourceModel\Product\CollectionFactory');
$_productCollection = $productCollection->create()
    ->addAttributeToSelect('*')
    ->setOrder('position', 'ASC')
    ->addCategoryFilter($category)->load();