Fügen Sie der Sammlung eines jeden Blocks Pagination hinzu
-
16-10-2019 - |
Frage
Ich habe eine Reihe von Sammlungen, die Blöcke haben, die den Inhalt an Frontend -Routen ausgeben (mein Konto, Frontend -Funktionen).
Ich muss einige davon paginieren. Ich weiß, dass in Sammlungen Paginierungsmethoden vorhanden sind, aber gibt es auch eine Möglichkeit, den Abfrageteil zu bewältigen? Ich hasse es, das Rad neu zu erfinden ...
Lösung
Es ist eigentlich ganz einfach.
Fügen Sie im Hauptblock, der Ihre Sammlung zum Rendern aufruft, Folgendes hinzu:
protected function _prepareLayout()
{
parent::_prepareLayout();
$pager = $this->getLayout()->createBlock('page/html_pager', 'your.custom.blockname.pager')
->setCollection($this->getCollection()); //call your own collection getter here, name it something better than getCollection, please; *or* your call to getResourceModel()
$this->setChild('pager', $pager);
return $this;
}
public function getPagerHtml()
{
return $this->getChildHtml('pager');
}
Standardmäßig beschränken dies Ihre Sammlung auf 10-at-a-Time! Süss!!
Fügen Sie dann aus Ihrer Vorlage, die Ihrer Sammlung zugeordnet ist, aus der Pagersteuerung hinzu, indem Sie die Ausgabe unserer anderen Methode widerspiegeln. getPagerHtml
:
<?php echo $this->getPagerHtml(); ?>
Quelle: Erfahrung. Und auch die sales/order_history
Block in Magento.
Andere Tipps
Ich habe diese innerhalb der Blockklasse verwendet (es ist mage_catalog_block_navigation):
$pager = new Mage_Page_Block_Html_Pager();
$pager->setLimit(100)->setCollection(...getCollection());
$this->setChild('pager', $pager);