我找不到在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文档中找不到一种分页我的实体的方法...我从我的块控制器(上面的代码)中获取它们。
答案 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;
}