So fügen Sie der benutzerdefinierten Sammlung in Magento 2 eine Paginierung hinzu

17

Ich arbeite an einem benutzerdefinierten Modul. Wie kann ich die Standard-Magento- Paginierung für meine benutzerdefinierte Sammlung verwenden und auch benutzerdefinierte Grenzwerte festlegen?

Qaisar Satti
quelle
1
Als ich mein benutzerdefiniertes Modul in Magento2 für Pagination & Limits erstellt habe, habe ich auf diesen Link verwiesen ( mage-world.com/blog/… ) und ich konnte es erledigen.
Arjun
Könnten Sie bitte erläutern, wie Sie den Magento-Katalog überschreiben können, um dem benutzerdefinierten Modul eine Paginierung hinzuzufügen? Den obigen Link habe ich eine Idee, ich möchte im Katalog-Modul überschreiben
Sushivam
@SachinS i Thin Du sprichst über Symbolleiste?
Qaisar Satti
Ja genau ... Ich habe beschrieben, was ich hier versucht und Fehler ... magento.stackexchange.com/questions/131896/…
Sushivam
@SachinS was Sie mit der Symbolleiste erreichen wollen und haben Sie dieses Problem
Qaisar Satti

Antworten:

23

Sammlung dafür bekommen

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

Fügen Sie die Paginierung hinzu

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

Hinzufügen des untergeordneten Blocks

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

in der HTML-Datei

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

Referenz

Qaisar Satti
quelle
Pssst: entweder $this->getRequest()->getParam('p') ?: 1oder noch besser $this->getRequest()->getParam('p', 1).
Nevvermind
Ich erhalte den Fehler, dass ein Element mit der ID bereits vorhanden ist, für alles, was ich versuche, den Pager-Block zu benennen, den ich mit Ihrem Code erstelle.
LM_Fielding
@LM_Fielding war noch nicht mit diesem Problem konfrontiert, aber versuchen Sie zu löschen var/cacheund var/generationOrdner
Qaisar Satti
Ich habe versucht, es für eine Symbolleiste oben und unten hinzuzufügen, also war es genau richtig.
LM_Fielding
1
@LM_Fielding Sie fügen es zweimal hinzu, was das Problem verursacht.
Qaisar Satti