我想对已经由
加载的产品集合进行排序$_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);
但无效。
默认排序正常。有人可以帮忙吗?
答案 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();