Pagination dan Sorting tidak berfungsi


10

Untuk modul khusus saya, saya sudah mendapatkan produk dari pabrikan. Untuk templat saya salin list.phtml.

Pada pagination file template muncul tetapi itu menunjukkan semua produk bukan batas yang dipilih per halaman. Penyortiran juga tidak berfungsi.

Bagaimana saya bisa membuatnya bekerja ??

Ini file blokir saya:

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

Jawaban:


2

Gunakan cuplikan di bawah ini untuk menambahkan pagination dan mengurutkan pada koleksi khusus Anda. Untuk setiap daftar koleksi kustom Anda harus membuat pager toolbar kustom juga.

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

Setelah ini, ganti

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

untuk menampilkan pager bawah dan toolbar sortasi atas.

Untuk pemesanan sortir, lakukan ini sebelum pengambilan koleksi:

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

Saya harap ini menyelesaikan masalah Anda.


Anda juga dapat menambahkan $ _productCollection-> setPageSize ($ itemsLimit) -> setCurPage ($ currPage);
Ahsan Horani

1

Anda juga harus menggunakan filter berikut:

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

Jadi kode lengkap Anda menjadi:

    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

Ini mungkin bukan situasi dalam kasus Anda, tetapi mungkin membantu orang lain yang mengalami masalah ini. Saya punya masalah ini saat menguji perubahan khusus pada getProductCollection().

Saya dapat memperbaikinya dengan menghapus kode logging yang saya tambahkan yang mencatat jumlah koleksi yang dikembalikan. Saya percaya bahwa apa pun yang menginterogasi hasil getProductCollection()pengumpulan Collection dalam metode ini akan memaksa koleksi untuk benar-benar memuat produk-produknya secara prematur dan akan mencegah modifikasi hilir untuk pemesanan koleksi dan pembatasan hasil dari diterapkan untuk kontrol paging.


1
Untuk tetap dapat mencatat jumlah koleksi tanpa memuat item koleksi, gunakan $collection->getSize(). Ini akan melakukan yang terpisah SELECT COUNT(*)dengan filter koleksi saat ini.
Jan Papenbrock

Terima kasih @ Jan Papenbrock. Itu berguna. Poin yang lebih besar yang saya coba sampaikan tetap ada. Jika Anda menyebabkan koleksi dimuat, itu akan mengganggu paging dan penyortiran yang diterapkan pada koleksi nanti jika belum dimuat.
Matt B

0

Anda harus mengganti _prepareLayout()dan mengatur data seperti di bawah ini.

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

beri tahu saya jika Anda memiliki pertanyaan.


masih tidak berfungsi. setelah menambahkan ini menampilkan layar putih.
Piyush

itu tidak akan seperti salin dan tempel sobat
Keyul Shah

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.