I am working on custom module. How can i use default magento pagination with my custom collection and also set custom limits on that?

up vote 20 down vote accepted

get collection for that

public function getNews()
    {
      //get values of current page
        $page=($this->getRequest()->getParam('p'))? $this->getRequest()->getParam('p') : 1;
    //get values of current limit
        $pageSize=($this->getRequest()->getParam('limit'))? $this->getRequest()->getParam('limit') : 1;


        $newsCollection = $this->newscollectionFactory->create();
        $newsCollection->addFieldToFilter('is_active',1);
        $newsCollection->setOrder('title','ASC');
        $newsCollection->setPageSize($pageSize);
        $newsCollection->setCurPage($page);
        return $newsCollection;
    }

Add pagination

protected function _prepareLayout()
{
    parent::_prepareLayout();
    $this->pageConfig->getTitle()->set(__('News'));


    if ($this->getNews()) {
        $pager = $this->getLayout()->createBlock(
            'Magento\Theme\Block\Html\Pager',
            'test.news.pager'
        )->setAvailableLimit(array(5=>5,10=>10,15=>15))->setShowPerPage(true)->setCollection(
            $this->getNews()
        );
        $this->setChild('pager', $pager);
        $this->getNews()->load();
    }
    return $this;
}

adding the child block

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

in phtml file

    <?php if ($block->getPagerHtml()): ?>
        <div class="order-products-toolbar toolbar bottom"><?php echo $block->getPagerHtml(); ?></div>
    <?php endif ?>

Reference

  • Pssst: either $this->getRequest()->getParam('p') ?: 1 or, better yet, $this->getRequest()->getParam('p', 1). – nevvermind Aug 8 '16 at 13:39
  • I get element with id already exists error for whatever I try to name the pager block I'm creating using your code. – LM_Fielding Dec 13 '16 at 14:40
  • @LM_Fielding not faced this issue yet but try deleting var/cache and var/generation folder – Qaisar Satti Dec 14 '16 at 6:08
  • I was trying to add it for a toolbar at the top and at the bottom, so it was exactly correct. – LM_Fielding Dec 15 '16 at 9:07
  • 1
    @LM_Fielding you are adding it twice that is causing the problem. – Qaisar Satti Dec 15 '16 at 9:49

Your Answer

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Not the answer you're looking for? Browse other questions tagged or ask your own question.