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

klr1opcd  于 2022-11-12  发布在  其他
关注(0)|答案(6)|浏览(189)

我想对已加载的产品集合进行排序

  1. $_productCollection = $this->getLoadedProductCollection();

在管理Magento的默认排序是风格属性
首先按样式排序,然后按颜色排序,最后按名称排序。
我试过了

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

且还

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

但没有工作。
默认排序工作正常。有人能帮忙吗?

bfnvny8b

bfnvny8b1#

您可以这样做:

  1. $_productCollection = $this->getLoadedProductCollection();
  2. $_productCollection->clear();
  3. $_productCollection->addAttributeToSort('color', Varien_Data_Collection::SORT_ORDER_ASC);
  4. foreach ($_productCollection as $product) {
  5. // ...
  6. }

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

0g0grzrc

0g0grzrc2#

您还可以克隆已加载的集合,然后根据需要修改查询。
//复制目前的集合。修改集合的较佳方式

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

//取消设定目前的coolection并附加您的自订筛选条件。

  1. $_productCollection->clear()
  2. ->addAttributeToFilter('color', Varien_Data_Collection::SORT_ORDER_ASC)
  3. ->load();
bvpmtnay

bvpmtnay3#

这里或其他地方都没有对我起作用。无论我怎么尝试,它都不会使用'getLoadedProductCollection()a对/Magento_Catalog/templates/product/list.phtml进行排序。还有一个奇怪的问题,在清除缓存后,产品会消失,直到重新索引完成。不知道那里发生了什么,有些事情不对劲。
所以我让它在下面的黑客方式工作(是的,我知道这不是“最佳实践”使用对象管理器,但它是唯一的工作!!)

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

wpx232ag4#

如果您的集合中有需要更高级排序/排序的产品,您可以将产品移到一个assoc数组中,这样您可以更容易地按照自己的意愿排序/排序。一旦顺序符合您的意愿,您就可以将它们添加回去,方法是首先使用$collection-removeAllItems()清除您的集合,然后使用$product迭代您的数组,并使用$collection-〉addItem($product)将每个产品移回集合;
我用这个当我想要一个粘性,不是由不同的排序/排序触摸。

dm7nw8vv

dm7nw8vv5#

您可以在集合上使用setOrder对任何集合数据进行排序,如下所示:

  1. $_productCollection->setOrder('id','DESC');

其中,id可以替换为列名,第二个参数可以根据需要为DESC & ASC。

41ik7eoe

41ik7eoe6#

使用以下命令使其在v2.3.7中运行

  1. $_productCollection = $block->getLoadedProductCollection();
  2. $_productCollection->getSelect()->reset(Zend_Db_Select::ORDER);
  3. $_productCollection->setOrder('price', 'ASC');

相关问题