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

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.

Ahsan Horani
sumber
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;
    }
Ajay Bisht
sumber
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.

Matt B
sumber
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.

Keyul Shah
sumber
masih tidak berfungsi. setelah menambahkan ini menampilkan layar putih.
Piyush
itu tidak akan seperti salin dan tempel sobat
Keyul Shah
0

Pergi ke Kelola Bagian Kategori dan atur adalah Opsi Jangkar ke "Ya".

pengguna3917822
sumber