Добавьте разбивку на страницы в коллекцию любого блока


У меня есть несколько коллекций, в которых есть блоки, выводящие содержимое на интерфейсные маршруты (Моя учетная запись, функции интерфейса).

Мне нужно разбить некоторые из них на страницы. Я знаю, что в коллекциях существуют методы разбиения на страницы, но есть ли способ также обработать часть строки запроса? Я ненавижу изобретать велосипед заново...

Author: philwinkle, 2013-07-29

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.

 13
Author: philwinkle, 2013-07-29 20:10:12

Я использовал этот класс внутренних блоков (это Mage_Catalog_Block_Navigation):

$pager = new Mage_Page_Block_Html_Pager();
$pager->setLimit(100)->setCollection(...getCollection());
$this->setChild('pager', $pager);
 0
Author: massimilianoarceri, 2014-09-01 10:19:07