カテゴリページに異なる数の製品を表示


7

カテゴリで異なる数の製品を表示しようとしていますが、1ページでしか機能しません。1ページに22製品を表示し、すべてのページを1ページあたり20製品表示します。最初のページでsetPageSizeを変更して管理できましたが、うまく機能していますが、製品を取得できないすべてのページを1ページあたり20に制限しています。

Page 1...22 products //works well
Page 2...20 products //doesn't work..shows from 21 to 40
Page 3...20 products //doesn't work..shows from 41 to 60

これが私がやっている方法です:

$currentPage = (int) Mage::app()->getRequest()->getParam('p');
if ($currentPage==0 || $currentPage==1){
    $productCollection->clear();
    $productCollection->setCurPage($currentPage)->setPageSize(22); //works..
} else {
        $productCollection->clear(); 
        $productCollection->getSelect()->limit(20,22); //doesn't work
}

どうすればこれを解決できますか?

ありがとう。

回答:


4

問題はLIMIT、コレクションがロードされる直前の「ページサイズ」と「現在のページ」に基づいて計算されることです。Mage_Eav_Model_Entity_Collection_Abstract :: _ loadEntities()を参照してください:

public function _loadEntities($printQuery = false, $logQuery = false)
{
    if ($this->_pageSize) {
        $this->getSelect()->limitPage($this->getCurPage(), $this->_pageSize);
    }

これ_pageSizeを0に設定することで防ぐことができます。

$productCollection->setPageSize(0);
$productCollection->getSelect()->limit(20,22);

さらに、すでにロードされているコレクションをリセットして再度ロードすることはお勧めできません。

catalog_product_collection_load_beforeコレクションがロードされる直前に制限を操作するためのオブザーバーを作成できます。

public function setProductPaging(Varien_Event_Observer $observer) 
{
    $collection = $observer->getCollection();
    if ($collection->getCurPage() == 1) {
        $collection->setPageSize(22);
    } else {
        $productCollection->setPageSize(0);
        $productCollection->getSelect()->limit(20, 22 + 20 * ($collection->getCurPage() - 2));
    }
}

ありがとう!これを確認して、動作するかどうかをお知らせします。それはうまくいくように見えます。
Kalpesh

動作しているように見えますが、ページネーションは正しくありません。21の製品がある場合、1ページではなく2が表示されます。
カルペシュ

ページ数はアイテム数をページサイズで割って計算されるため、これは注意が必要です。ツールバーブロックでこの計算を何らかの方法で操作する必要があります
Fabian Schmengler

ここでMage::getSingleton('catalog/session')->setLimitPage(22);、ツールバーが呼び出される前に、猫のページで製品の制限を設定できることがわかりました。ありがとう!
Kalpesh

私はこのイベントを使用しましたcatalog_block_product_list_collection
カルペシュ2015
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.