mymotherland
mymotherland

Reputation: 8226

Add pagination to custom module in Magento?

I am trying to add pagination in custom module. I have the following code under Block folder in articles.php

class Compname_Modname_Block_Articles extends Mage_Core_Block_Template
{
    public function __construct()
    {
        parent::__construct();
        $collection = Mage::getModel('articles/articles')->getCollection(); 
        $this->setCollection($collection);
    }
....
....
    public function getTagsList(){  
                $pager = $this->getLayout()->createBlock('page/html_pager', 'custom.pager'); 
                $pager->setAvailableLimit(array(5=>5,10=>10,20=>20,'all'=>'all'));  
                $pager->setCollection($this->getCollection());   
                $this->setChild('pager', $pager);
                $this->getCollection()->load();
                return $this;                
    }
        public function getPagerHtml()
        {
            return $this->getChildHtml('pager');
        }
.........
..........
}

I have cms page in admin end having the following code

 <reference name="content">
            <block type="articles/articles" name="articles.tags"  as="tags.articles" template="articles/tags.phtml" />
   </reference>

Under Articles folder in my theme , i have the file called tags.phtml having the code like,

   <?php echo $this->getPagerHtml(); ?> // this displays exact pagination with page numbers
    <?php  $collection = $this->getTagsList(); 
    var_dump($collection->getSize()); // Always return NULL
    ?>

getSize() always return NULL so i am not getting my collection value. Kindly advice on this

Upvotes: 1

Views: 5002

Answers (2)

Kashif
Kashif

Reputation: 335

True, solution for a custom module.

<?php
class Test_Featuredsalons_Block_Featuredsalons extends Mage_Core_Block_Template
{

    public function __construct()
    {
        parent::__construct();
        $collection = Mage::getModel('featuredsalons/featuredsalons')->getCollection();
        $this->setCollection($collection);
    }

    protected function _prepareLayout()
    {
        parent::_prepareLayout();

        $pager = $this->getLayout()->createBlock('page/html_pager', 'custom.pager');
        $pager->setCollection($this->getCollection());
        $this->setChild('pager', $pager);
        $this->getCollection()->load();

        return $this;
    }

    public function getPagerHtml()
    {
        return $this->getChildHtml('pager');
    }

    public function getCollection()     
     {            
        $limit        =    10;
        $curr_page    =    1;

        if(Mage::app()->getRequest()->getParam('p'))
        {
            $curr_page    =    Mage::app()->getRequest()->getParam('p');
        }

        //Calculate Offset    
        $offset     =    ($curr_page - 1) * $limit;

        $collection    =    Mage::getModel('featuredsalons/featuredsalons')->getCollection()
                                                    ->addFieldToFilter('status',1);

        $collection->getSelect()->limit($limit,$offset);

        return $collection;
    }    


}
?>

In phtml file, use below code:
<?php     echo $this->getPagerHtml();     ?>    
<?php    $news    =    $this->getCollection();    ?>

Thanks, Kashif

Upvotes: 1

Dmytro Zavalkin
Dmytro Zavalkin

Reputation: 5277

You return your block class instance from Compname_Modname_Block_Articles::getTagsList()

public function getTagsList(){

    return $this;                
}

That's why of course

<?php  $collection = $this->getTagsList(); 
var_dump($collection->getSize()); // Always return NULL
?>

Upvotes: 1

Related Questions