como adicionar paginação na coleção personalizada no Magento 2

17

Estou trabalhando no módulo personalizado. Como posso usar a paginação magento padrão com minha coleção personalizada e também definir limites personalizados?

Qaisar Satti
fonte
1
Quando criei meu módulo personalizado no magento2 para paginação e limites, consultei esses links ( mage-world.com/blog/… ) e consegui fazê-lo.
Arjun
Você poderia explicar como substituir o Catálogo Magento por adicionar paginação ao módulo personalizado! no link acima eu tenho alguma idéia, eu quero substituir no módulo Catalog
Sushivam
@SachinS i thin você está falando sobre barra de ferramentas?
Qaisar Satti
Sim exatamente ... Eu descrevi o que eu tentei e erro aqui ... magento.stackexchange.com/questions/131896/…
Sushivam
@SachinS o que você quer alcançar com barra de ferramentas e você resolver este magento.stackexchange.com/questions/131805/...
Qaisar Satti

Respostas:

24

obter coleção para isso

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;
    }

Adicionar paginação

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;
}

adicionando o bloco filho

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

no arquivo phtml

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

Referência

Qaisar Satti
fonte
Pssst: ou $this->getRequest()->getParam('p') ?: 1ou, melhor ainda $this->getRequest()->getParam('p', 1),.
precisa saber é o seguinte
Eu recebo o elemento id já existe um erro para o que eu tentar nomear o bloco de pager que estou criando usando seu código.
LM_Fielding
@LM_Fielding não enfrentou esta questão ainda, mas tente excluir var/cachee var/generationpasta
Qaisar Satti
Eu estava tentando adicioná-lo para uma barra de ferramentas na parte superior e inferior, por isso estava exatamente correto.
LM_Fielding
1
@LM_Fielding você está adicionando duas vezes o que está causando o problema.
Qaisar Satti