Sayfalandırma ve Sıralama çalışmıyor


10

Özel modülüm için üreticiye göre ürün aldım. Şablon için kopyaladım list.phtml.

Şablonda dosya sayfalaması görünür ancak sayfa başına seçilen sınır yerine tüm ürünleri gösterir. Sıralama da çalışmıyor.

Nasıl çalıştırabilirim ??

Benim blok dosyam:

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

Yanıtlar:


2

Özel koleksiyonunuza sayfalandırma ve sıralama eklemek için aşağıdaki snippet'i kullanın. Her özel koleksiyon listesi için özel araç çubuğu çağrı cihazı da oluşturmanız gerekir.

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

Bundan sonra, değiştirin

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

alt çağrı cihazını ve üst sıralama araç çubuğunu görüntülemek için

Sıralama düzeni için toplama yüklemesinden önce bunu yapın:

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

Umarım bu sorununuzu çözer.


ayrıca $ _productCollection-> setPageSize ($ itemsLimit) -> setCurPage ($ currPage);
Ahsan Horani

1

Aşağıdaki filtreleri de kullanmanız gerekir:

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

Böylece tam kodunuz şöyle olur:

    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

Bu sizin durumunuzdaki durum olmayabilir, ancak bu sorunu yaşayan başka birine yardımcı olabilir. Özel değişiklikleri test ederken bu sorunu yaşadım getProductCollection().

Iade koleksiyon sayım kaydetti eklediğim günlük kodunu kaldırarak düzeltmek mümkün. Toplama yükü getProductCollection()sonucunu yöntemde sorgulayan herhangi bir şeyin , koleksiyonu gerçekten ürünlerini erken yüklemeye zorlayacağına ve toplama düzeninde aşağı yönde değişiklik yapılmasına ve sayfalama denetimleri için sonuç sınırlamasının uygulanmasına engel olacağına inanıyorum.


1
Koleksiyon öğelerini yüklemeden koleksiyon sayısını günlüğe kaydedebilmek için tuşunu kullanın $collection->getSize(). SELECT COUNT(*)Mevcut toplama filtreleri ile ayrı bir performans gösterir .
Jan Papenbrock

Teşekkürler @ Jan Papenbrock. Bu kullanışlı. Yine de yapmaya çalıştığım en büyük nokta kalıyor. Koleksiyonun yüklenmesine neden olursanız, daha sonra yüklenmemişse koleksiyona uygulanan disk belleği ve sıralamaya müdahale eder.
Matt B

0

Verileri geçersiz kılmanız _prepareLayout()ve verileri aşağıdaki gibi ayarlamanız gerekir.

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

herhangi bir sorunuz varsa bana bildirin.


hala çalışmıyor. ekledikten sonra beyaz ekran görüntülenir.
Piyush

sadece kopyala ve yapıştır dostum gibi olmayacak
Keyul Shah

0

Kategori Bölümünü Yönet'e gidin ve Bağlantı Seçeneğini "Evet" olarak ayarlayın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.