Cómo agregar paginación en una colección personalizada en Magento 2

17

Estoy trabajando en un módulo personalizado. ¿Cómo puedo usar la paginación predeterminada de magento con mi colección personalizada y también establecer límites personalizados para eso?

Qaisar Satti
fuente
1
Cuando creé mi módulo personalizado en magento2 para paginación y límites, referí este enlace ( mage-world.com/blog/… ) y pude hacerlo.
Arjun
¡Podría explicar cómo anular el Catálogo de Magento para agregar paginación al módulo personalizado! el enlace de arriba tengo una idea, quiero anular en el módulo Catálogo
Sushivam
@SachinS creo que estás hablando de la barra de herramientas?
Qaisar Satti
Sí exactamente ... he descrito lo que probé y error aquí ... magento.stackexchange.com/questions/131896/…
Sushivam
@SachinS lo que quieres lograr con la barra de herramientas y resolviste
Qaisar Satti

Respuestas:

24

obtener la colección para eso

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

Agregar paginación

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

agregando el bloque hijo

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

en archivo phtml

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

Referencia

Qaisar Satti
fuente
Pssst: o bien $this->getRequest()->getParam('p') ?: 1o, mejor aún, $this->getRequest()->getParam('p', 1).
nevvermind
Obtengo el elemento con id ya existe un error para lo que sea que intente nombrar el bloque de buscapersonas que estoy creando usando su código.
LM_Fielding
@LM_Fielding aún no se enfrentó a este problema, pero intente eliminar var/cachey var/generationcarpeta
Qaisar Satti
Intenté agregarlo para una barra de herramientas en la parte superior e inferior, por lo que era exactamente correcto.
LM_Fielding
1
@LM_Fielding lo está agregando dos veces, lo que está causando el problema.
Qaisar Satti