Magento 2分页

时间:2016-01-25 16:05:28

标签: php pagination magento2

我找不到在magento 2中对我的实体进行分页的方法。我有这段代码:

    public function getPosts()
    {
        if (!$this->hasData('posts')) {
            $posts = $this->_postCollectionFactory->create()->addOrder(
                PostInterface::CREATED,
                PostCollection::SORT_ORDER_DESC
            );

            $this->setData('posts', $posts);
        }
        return $this->getData('posts');
    }

在magento 1.x我有自定义块有“page / html_pager”类型但我在magento 2文档中找不到一种分页我的实体的方法...我从我的块控制器(上面的代码)中获取它们。

3 个答案:

答案 0 :(得分:3)

请参阅以下链接,在该示例中添加了分页。

http://www.mage-world.com/blog/create-the-news-list-page-via-frontend-in-magento-2.html

答案 1 :(得分:0)

你应该检查文件toolbar.phtml。在这里,您可以找到一个名为

的类方法
 $block->getPagerHtml()

此方法调用实体的分页。例如,在类别页面中,产品将是实体。但我猜你总能改变这种默认方法。如果您继续跟进此方法,则会在

中找到块类
 \Magento\Catalog\Block\Product\ProductList\Toolbar.php

你会发现函数getPagerHtml()

  public function getPagerHtml()
  {
    $pagerBlock = $this->getChildBlock('product_list_toolbar_pager');

    if ($pagerBlock instanceof \Magento\Framework\DataObject) {
        /* @var $pagerBlock \Magento\Theme\Block\Html\Pager */
        $pagerBlock->setAvailableLimit($this->getAvailableLimit());

        $pagerBlock->setUseContainer(
            false
        )->setShowPerPage(
            false
        )->setShowAmounts(
            false
        )->setFrameLength(
            $this->_scopeConfig->getValue(
                'design/pagination/pagination_frame',
                \Magento\Store\Model\ScopeInterface::SCOPE_STORE

            )
        )->setJump(
            $this->_scopeConfig->getValue(
                'design/pagination/pagination_frame_skip',
                \Magento\Store\Model\ScopeInterface::SCOPE_STORE
            )
        )->setLimit(
            $this->getLimit()
        )->setCollection(
            $this->getCollection()
        );
        return $pagerBlock->toHtml();
    }

    return '';
}

结论:

在app \ code \ Your \ Custom \ Block \ Toolbar.php中创建一个自定义模块,扩展到 \ Magento的\目录\块\产品\产品列表\工具栏

namespace Your\Custom\Block\;

Class Toolbar extends \Magento\Catalog\Block\Product\ProductList\Toolbar 
{

 public function getPagerHtml()
 {
      ..... Your Code for you post entities .....
 }

}

你的布局xml添加工具栏块并添加块类 - > your_custom_index.xml

    <block class="Your\Custom\Block\Toolbar" name="product_list_toolbar" template="Your_Custom::product/list/toolbar.phtml">

模板 - &gt;视图\前端\模板\产品\列表\ toolbar.phtml:

  <?php 

   echo $block->getPagerHtml();
  

现在这是一个关于如何扩展此功能的示例。   阅读有关创建和扩展核心模块的更多信息,因为您将会这样   需要更多文件来扩展我没有发布的自定义模块   因为他们离开了主题。

答案 2 :(得分:0)

有以下步骤将分页添加到Magento 2中的自定义块中

第1步

public function getPosts()
{
    $page=($this->getRequest()->getParam('p'))? $this->getRequest()->getParam('p') : 1;`enter code here`
    $pageSize=($this->getRequest()->getParam('limit'))? $this->getRequest()->getParam('limit') : 5;
    if (!$this->hasData('posts')) {
        $posts = $this->_postCollectionFactory->create();

        $posts->addOrder('field name','ASC');
    }

    return $posts;
}