在Magento中为自定义模块添加分页


Add pagination to custom module in Magento?

我正在尝试在自定义模块中添加分页。我在articles.php 中的Block文件夹下有以下代码

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');
        }
.........
..........
}

我在管理端有cms页面,有以下代码

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

在我的主题中的Articles文件夹下,我有一个名为tags.phtml的文件,代码如下,

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

getSize()总是返回NULL,所以我没有得到集合值。请就此提供建议

您从Compname_Modname_Block_Articles::getTagsList() 返回块类实例

public function getTagsList(){
    return $this;                
}

这就是为什么

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

True,自定义模块的解决方案。

<?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();    ?>

谢谢,Kashif