magento2解决分页显示异常问题

数据分页在magento里面是一个基本的功能,调用magento自带的$block->getPagerHtml(),再配合上资源模块里面$this->setChild('pager', $pager);也就能完成分页了,但这次却出现了异常,主要表现在数据并不能分页,但分页块却是正常的显示出来了,如下图:

25条数据,按10条分页,虽然分页连接出来了,但数据却全在一个页面,每2/3页,也是一样的数据

原因:在调用资源模块时,直接返回了资源模型数据,导致每一次都是load最新的数据


  protected function _prepareLayout()
  {
      parent::_prepareLayout();
      if ($this->getCollection()) {
          $pager = $this->getLayout()->createBlock(
              \Magento\Theme\Block\Html\Pager::class,
              'my.list.give'
          )->setCollection(
              $this->getCollection()
          );
          $this->setChild('pager', $pager);
          $this->getCollection()->load();
      }
      return $this;
  }
  
 public function getCollection(){
    return $this->getModel()->getList();
 }

解决方案:将collection保存到变量里面,没数据的时候才是调用资源模块

  protected $collection;

  protected function _prepareLayout()
  {
      parent::_prepareLayout();
      if ($this->getCollection()) {
          $pager = $this->getLayout()->createBlock(
              \Magento\Theme\Block\Html\Pager::class,
              'my.list.give'
          )->setCollection(
              $this->getCollection()
          );
          $this->setChild('pager', $pager);
          $this->getCollection()->load();
      }
      return $this;
  }
  
 public function getCollection(){
    //不存在数据资源时,才去连接查询
    if(!$this->collection){
      $this->collection = $this->getModel()->getList();
    }
    return $this->collection;
 
 }