comment ajouter la pagination sur une collection personnalisée dans Magento 2

17

Je travaille sur un module personnalisé. Comment puis-je utiliser la pagination magento par défaut avec ma collection personnalisée et également définir des limites personnalisées à ce sujet?

Qaisar Satti
la source
1
Lorsque j'ai créé mon module personnalisé dans magento2 pour la pagination et les limites, j'ai référé ces liens ( mage-world.com/blog/… ) et j'ai pu le faire.
Arjun
Pourriez-vous s'il vous plaît expliquer comment remplacer le catalogue Magento pour ajouter la pagination au module personnalisé! le lien ci-dessus j'ai une idée, je veux passer outre dans le module Catalogue
Sushivam
@SachinS i thin vous parlez de barre d'outils?
Qaisar Satti
Oui exactement ... J'ai décrit ce que j'ai essayé et l'erreur ici ... magento.stackexchange.com/questions/131896/…
Sushivam
@SachinS ce que vous voulez réaliser avec la barre d'outils et avez-vous résolu ce magento.stackexchange.com/questions/131805/…
Qaisar Satti

Réponses:

25

obtenir la collecte pour cela

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

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

ajout du bloc enfant

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

dans le fichier phtml

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

Référence

Qaisar Satti
la source
Pssst: soit $this->getRequest()->getParam('p') ?: 1ou, mieux encore, $this->getRequest()->getParam('p', 1).
nevvermind
J'obtiens un élément avec id existe déjà une erreur pour tout ce que j'essaie de nommer le bloc de pageur que je crée en utilisant votre code.
LM_Fielding
@LM_Fielding n'a pas encore rencontré ce problème mais essayez de supprimer var/cacheet de supprimer le var/generationdossier
Qaisar Satti
J'essayais de l'ajouter pour une barre d'outils en haut et en bas, donc c'était exactement correct.
LM_Fielding
1
@LM_Fielding vous l'ajoutez deux fois à l'origine du problème.
Qaisar Satti