Magento:如何从产品集合中获取所有产品而忽略设置的限制?

9
我希望能够在Mage_Catalog_Block_Product_List_Toolbar块中迭代所有产品集合,忽略之前通过“setPageSize()”和“setCurPage()”设置的限制。我的方法如下所示:
/** @var Mage_Catalog_Block_Product_List_Toolbar $this */
//...
$collection = $this->getCollection();
// Remove the LIMIT and OFFSET parts from the generated SQL query:
$collection->getSelect()->reset(Zend_Db_Select::LIMIT_COUNT);
$collection->getSelect()->reset(Zend_Db_Select::LIMIT_OFFSET);
// Reload the collection using the new SQL query:
$collection->load();
foreach($collection as $product)
{
    // ...
}
// ...

问题在于,集合似乎没有重新加载,因此之前设置的限制仍然存在。我错过了什么吗?集合被锁定或者其他原因导致不能更改吗?

1个回答

13

在产品列表工具栏块中使用的集合通常在之前已经加载并通过Mage_Catalog_Block_Product_List::_beforeHtml()设置为工具栏实例。

仅重置语句的计数和偏移量是不够的。

您还需要重置属性。

Varien_Data_Collection::_isCollectionLoaded
Varien_Data_Collection::_pageSize

这可以通过

$collection->clear();
$collection->setPageSize(false);

在你的resetload之间插入这些指令,你应该就没问题了。


这就是诀窍,因此集合在加载后确实被锁定。 - Subsurf
只需要使用clear和setPageSize,然后再进行load操作即可。谢谢。 - Alex M

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接