8

我想遍历 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)
{
    // ...
}
// ...

问题是,集合似乎没有被重新加载,所以之前设置的限制仍然存在。我在这里想念什么?收藏是否被锁定或其他什么东西让我无法更改?

4

1 回答 1

13

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

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

您还需要重置属性

Varien_Data_Collection::_isCollectionLoaded
Varien_Data_Collection::_pageSize

这可以通过

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

reset在您的 's 和 the之间插入这些说明load,您应该没问题。

于 2012-08-20T20:59:50.070 回答