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

时间:2012-03-19 12:35:20

标签: php magento magento-1.5

我正在尝试在自定义模块中添加分页。我在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>

在我的主题的文章文件夹下,我有一个名为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,所以我没有得到我的收藏价值。请提供关于此的建议

2 个答案:

答案 0 :(得分:1)

您从Compname_Modname_Block_Articles::getTagsList()

返回您的块类实例
public function getTagsList(){

    return $this;                
}

这就是为什么当然

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

答案 1 :(得分:0)

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

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

谢谢, 卡希夫