Phân trang và sắp xếp không hoạt động


10

Đối với mô-đun tùy chỉnh của tôi, tôi đã nhận được sản phẩm của nhà sản xuất. Đối với mẫu tôi đã sao chép list.phtml.

Trên trang mẫu tệp xuất hiện nhưng nó hiển thị tất cả sản phẩm thay vì giới hạn được chọn trên mỗi trang. Sắp xếp không hoạt động quá.

Làm thế nào tôi có thể làm cho nó hoạt động ??

Đây là tập tin khối của tôi:

protected function _getProductCollection() 
{
    if (is_null($this->_productCollection)) {
        $layer = $this->getLayer();
        $brand_id = $this->getRequest()->getParam('id');
        $collection = Mage::getModel('catalog/product')->getCollection();
        $collection->addAttributeToSelect('*');
        $collection->addFieldToFilter(array(
            array('attribute' => 'manufacturer', 'eq' => $brand_id)
        ));
    }

    return $collection;
}

Câu trả lời:


2

Sử dụng đoạn trích dưới đây để thêm phân trang và sắp xếp trên bộ sưu tập tùy chỉnh của bạn. Đối với mỗi danh sách bộ sưu tập tùy chỉnh, bạn cũng phải tạo máy nhắn tin thanh công cụ tùy chỉnh.

    $itemsLimit         =   $_GET["limit"] ? $_GET["limit"] : Mage::getStoreConfig('catalog/frontend/grid_per_page');   //Set items to show per page
    $currPage               =   $_GET["p"] ? $_GET["p"] : 1;                //Set current page      
   /*   Set Pagination for Custom Loaded Collection */                              
    $toolbar = Mage::getBlockSingleton('catalog/product_list')->getToolbarBlock();
    $toolbar->setCollection($_productCollection);

    /*  Set Pager   */
    $pager = $this->getLayout()->createBlock('page/html_pager', 'custom.pager');
    $pager->setAvailableLimit(array($itemsLimit=>$itemsLimit));
    $pager->setCollection($_productCollection);
    $toolbar->setChild('product_list_toolbar_pager', $pager);
    $toolbar->setData('_current_limit', $itemsLimit);

Sau này, thay thế

$this->getToolbarHtml(); by $toolbar->toHtml(); 

để hiển thị máy nhắn tin dưới cùng và thanh công cụ sắp xếp hàng đầu.

Để sắp xếp thứ tự, làm điều này trước khi tải bộ sưu tập:

$_productCollection->addAttributeToSort($_GET["order"], $_GET["dir"]');

Tôi hy vọng điều này giải quyết vấn đề của bạn.


ngoài ra, bạn có thể thêm $ _productCollection-> setPageSize ($ itemsLimit) -> setCurPage ($ currentPage);
Ahsan Horani

1

Bạn cũng phải sử dụng các bộ lọc sau:

    ->addAttributeToSort($_GET['order'],$_GET['dir'] )
    ->setPageSize($limit)
    ->setCurPage($_GET['p'])

Vì vậy, mã hoàn chỉnh của bạn trở thành:

    protected function _getProductCollection() 
    {
        if (is_null($this->_productCollection)) 
        {
            $layer = $this->getLayer();
            $brand_id = $this->getRequest()->getParam('id');
            $collection = Mage::getModel('catalog/product')->getCollection();
            $collection->addAttributeToSelect('*');
            $collection->addFieldToFilter(array(array('attribute'=>'manufacturer','eq'=>$brand_id),
    ))
$collection->addAttributeToSort($_GET['order'],$_GET['dir'] );
    $collection->setPageSize($_GET['limit']);
    $collection->setCurPage($_GET['p']);



        }

        return $collection;
    }

1

Đây có thể không phải là tình huống trong trường hợp của bạn, nhưng nó có thể giúp đỡ người khác đang gặp vấn đề này. Tôi đã có vấn đề này trong khi thử nghiệm thay đổi tùy chỉnh trong getProductCollection().

Tôi đã có thể sửa nó bằng cách xóa mã đăng nhập mà tôi đã thêm ghi chú số đếm của bộ sưu tập được trả về. Tôi tin rằng bất cứ điều gì thẩm vấn tải Bộ sưu tập đều dẫn đến getProductCollection()phương pháp sẽ buộc bộ sưu tập thực sự tải sản phẩm của mình sớm và sẽ ngăn các sửa đổi xuôi dòng đối với thứ tự bộ sưu tập và giới hạn kết quả được áp dụng cho các điều khiển phân trang.


1
Để vẫn có thể ghi nhật ký bộ sưu tập mà không cần tải các mục bộ sưu tập, hãy sử dụng $collection->getSize(). Nó sẽ thực hiện riêng biệt SELECT COUNT(*)với các bộ lọc bộ sưu tập hiện tại.
Jan Papenbrock

Cảm ơn @Jan Papenbrock. Đó là tiện dụng. Điểm lớn hơn tôi đã cố gắng để làm mặc dù vẫn còn. Nếu bạn khiến bộ sưu tập tải, nó sẽ can thiệp vào phân trang và sắp xếp được áp dụng cho bộ sưu tập sau nếu nó chưa được tải.
Matt B

0

Bạn phải ghi đè _prepareLayout()và thiết lập dữ liệu như bên dưới snap.

protected function _prepareLayout()
{
    parent::_prepareLayout();
    $pager = $this->getLayout()->createBlock('page/html_pager')->setCollection($this->getDatasets());
    $this->setChild('pager', $pager);
    $this->getDatasets()->load();
    return $this;
}

Hãy cho tôi biết nếu bạn có bất kỳ câu hỏi.


nó vẫn không hoạt động Sau khi thêm nó, nó sẽ hiển thị màn hình trắng.
Piyush

nó sẽ không giống như sao chép và dán bạn thân
Keyul Shah

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.