Magento – How to call Mage_Page_Block_Html_Pager class in list.phtml

classmagento-1.7modelpaginationtemplate

I am wanting to include a larger than normal 'next page' type button in the list.phtml template whilst still having the normal pagination from pager.phtml

The function I'm wanting to use is found in code/core/Mage/Page/Block/Html/Pager.php:

public function getNextPageUrl()
    {
        return $this->getPageUrl($this->getCollection()->getCurPage(+1));
    }

This can be called in pager.phtml by performing $this->getNextPageUrl(). I'm wanting to call this function inside list.phtml but I'm not sure how to get it. Using $this->getNextPageUrl() doesn't work.

I've also tried variations of Mage::getModel('page/html_pager')->getNextPageUrl() without luck.

Best Answer

There are two ways of doing this. One is slightly easier than the other.

Add After getToolbarHtml call

If you do it after the call to getToolbarHtml in the list.phtml then the following code will work.

<?php echo $this->getChild('product_list_toolbar')->getChild('product_list_toolbar_pager')->getNextPageUrl() ?>

This is because the pager is actually inside the toolbar and not the list, see layout xml.

<block type="catalog/product_list" name="product_list" template="catalog/product/list.phtml">
    <block type="catalog/product_list_toolbar" name="product_list_toolbar" template="catalog/product/list/toolbar.phtml">
        <block type="page/html_pager" name="product_list_toolbar_pager"/>

And most importantly the collection is setup in the toolbar's getPagerHtml function:

public function getPagerHtml()
{
    $pagerBlock = $this->getChild('product_list_toolbar_pager');

    if ($pagerBlock instanceof Varien_Object) {

        /* @var $pagerBlock Mage_Page_Block_Html_Pager */
        $pagerBlock->setAvailableLimit($this->getAvailableLimit());

        $pagerBlock->setUseContainer(false)
            ->setShowPerPage(false)
            ->setShowAmounts(false)
            ->setLimitVarName($this->getLimitVarName())
            ->setPageVarName($this->getPageVarName())
            ->setLimit($this->getLimit())
            ->setFrameLength(Mage::getStoreConfig('design/pagination/pagination_frame'))
            ->setJump(Mage::getStoreConfig('design/pagination/pagination_frame_skip'))
            ->setCollection($this->getCollection());

        return $pagerBlock->toHtml();
    }

    return '';
}

Add before getToolbarHtml call

Or if you simply want to put it anywhere in the template what you can do is set the collection using the list`s collection with the following code.

$productCollection = $this->getLoadedProductCollection();
$pagerBlock = $this->getChild('product_list_toolbar')->getChild('product_list_toolbar_pager');
$pagerBlock->setCollection($productCollection);
echo $pagerBlock->getNextPageUrl();
Related Topic