8

「setPageSize()」と「setCurPage()」によって以前に設定された制限を無視して、ブロックMage_Catalog_Block_Product_List_Toolbarで指定された製品コレクション内のすべての製品を反復処理したいと思います。私のアプローチは次のようになります。

/** @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と、load問題がないはずです。

于 2012-08-20T20:59:50.070 に答える