Добавьте разбивку на страницы в коллекцию любого блока
У меня есть несколько коллекций, в которых есть блоки, выводящие содержимое на интерфейсные маршруты (Моя учетная запись, функции интерфейса).
Мне нужно разбить некоторые из них на страницы. Я знаю, что в коллекциях существуют методы разбиения на страницы, но есть ли способ также обработать часть строки запроса? Я ненавижу изобретать велосипед заново...
2 answers
На самом деле это довольно просто.
В главном блоке, который вызывает вашу коллекцию для визуализации, добавьте следующее:
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');
}
По умолчанию это ограничит вашу коллекцию до 10 за раз! Милая!!
Затем из вашего шаблона phtml, связанного с вашей коллекцией, добавьте элементы управления пейджером, повторив вывод нашего другого метода, getPagerHtml
:
<?php echo $this->getPagerHtml(); ?>
Источник: Опыт. А также блок sales/order_history
в Magento.
Я использовал этот класс внутренних блоков (это Mage_Catalog_Block_Navigation):
$pager = new Mage_Page_Block_Html_Pager();
$pager->setLimit(100)->setCollection(...getCollection());
$this->setChild('pager', $pager);