Hiển thị số lượng sản phẩm khác nhau trong trang danh mục


7

Tôi đang cố gắng hiển thị số lượng sản phẩm khác nhau trong danh mục nhưng nó chỉ hoạt động trên trang 1. Tôi muốn hiển thị 22 sản phẩm trên trang1 và nghỉ tất cả các trang 20 sản phẩm trên mỗi trang. Tôi đã quản lý để thay đổi bằng setPageSize trong trang đầu tiên và nó đang hoạt động tốt, nhưng phần còn lại tất cả các trang tôi không thể có giới hạn sản phẩm là 20 trên mỗi trang.

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

Đây là cách tôi đang làm:

$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
}

Bất kỳ ý tưởng làm thế nào tôi có thể giải quyết điều này?

Cảm ơn.

Câu trả lời:


4

Vấn đề là LIMITtính toán được dựa trên "kích thước trang" và "trang hiện tại" ngay trước khi bộ sưu tập được tải. Xem Mage_Eav_Model_Entity_Collection_Abauge :: _ loadEntities () :

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

Bạn có thể ngăn điều này bằng cách đặt _pageSizethành 0:

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

Bên cạnh đó, đặt lại bộ sưu tập đã tải để tải lại không phải là ý kiến ​​hay.

Bạn có thể viết một người quan sát catalog_product_collection_load_befoređể thao túng giới hạn ngay trước khi bộ sưu tập được tải:

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));
    }
}

Cảm ơn! Tôi sẽ kiểm tra điều này và cho bạn biết nếu nó hoạt động. Có vẻ như nó nên hoạt động mặc dù.
Kalpesh

Nó dường như làm việc nhưng phân trang là không chính xác. Nếu có 21 sản phẩm thì thay vì hiển thị 1 trang thì nó hiển thị 2. Có ý kiến ​​gì không?
Kalpesh

OK điều này sẽ rất khó khăn vì số lượng trang được tính theo số lượng mục chia cho kích thước trang. Bạn sẽ cần phải thao tác tính toán này trong khối thanh công cụ bằng cách nào đó
Fabian Schmengler

Tôi đã tìm ra nó, chúng ta có thể đặt giới hạn sản phẩm trên trang mèo ở đây Mage::getSingleton('catalog/session')->setLimitPage(22);trước khi thanh công cụ được gọi. Cảm ơn!
Kalpesh

Tôi đã sử dụng sự kiện nàycatalog_block_product_list_collection
Kalpesh
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.