georgringer / numbered-pagination
为TYPO3改进的分页
Requires
- php: >=7.3
- typo3/cms-core: ^9 || ^10 || ^11 || ^12
Replaces
- typo3-ter/numbered-pagination: 2.0.0
README
从TYPO3 10版本开始,已提供新的分页API,它取代了在版本11.0中删除的分页小部件控制器。官方文档
此扩展提供了一种改进的分页,可用于对数组项或Extbase查询结果进行分页。主要优点是它减少了显示的页数。
示例:想象有1000条记录,每页20项,这将导致50个链接。使用NumberedPagination
,您将得到类似< 1 2 ... 21 22 23 24 ... 100 >
的内容
安装
使用composer require georgringer/numbered-pagination
安装扩展,或从extensions.typo3.org或扩展管理器下载。
使用方法
只需将SimplePagination
的使用替换为\GeorgRinger\NumberedPagination\NumberedPagination
即可完成。将第二个参数设置为应渲染的最大链接数。
$itemsPerPage = 10; $maximumLinks = 15; $currentPage = $this->request->hasArgument('currentPage') ? (int)$this->request->getArgument('currentPage') : 1; $paginator = new \TYPO3\CMS\Extbase\Pagination\QueryResultPaginator($allItems, $currentPage, $itemsPerPage); $pagination = new \GeorgRinger\NumberedPagination\NumberedPagination($paginator, $maximumLinks); $this->view->assign('pagination', [ 'paginator' => $paginator, 'pagination' => $pagination, ]);
模板
<f:for each="{pagination.paginator.paginatedItems}" as="item" iteration="iterator"> <f:render partial="Item" arguments="{item:item}" /> </f:for> <f:render partial="Pagination" arguments="{pagination: pagination.pagination, paginator: pagination.paginator, actionName: 'listXYZ'}" />
将分页部分EXT:numbered_pagination/Resources/Private/Partials/Pagination.html
复制到您的扩展中,或通过提供路径映射直接使用。
# Example for extension "fo"
plugin.tx_fo.view.partialRootPaths.4483 = EXT:numbered_pagination/Resources/Private/Partials/
默认的分页器看起来像这样
- [1] 2 3 … 下一个
- 1 [2] 3 … 下一个
- 上一个 … 2 [3] 4 … 下一个
- 上一个 … 3 [4] 5
- 上一个 … 3 4 [5]
以下是如何实现不同但仍常见的分页器的三个说明
场景1
通过取消注释li.first
和li.last
并注释掉li.prev
和li.next
,它看起来像这样
- [1] 2 3 … 最后
- 1 [2] 3 … 最后
- 第一个 2 [3] 4 最后
- 第一个 … 3 [4] 5
- 第一个 … 3 4 [5]
场景1(替代方案)
通过strong
添加地将它们的文本更改为1
和{pagination.lastPageNumber}
,它看起来像这样
- [1] 2 3 … 5
- 1 [2] 3 … 5
- 1 2 [3] 4 5
- 1 … 3 [4] 5
- 1 … 3 4 [5]
场景3
通过取消注释li.first
和li.last
(并将它们重命名为|<
和>|
)并将它们的位置与li.prev
和li.next
(并将它们重命名为<
和>
)翻转,它看起来像这样
- [1] 2 3 … > >|
- 1 [2] 3 … > >|
- |< < … 2 [3] 4 … > >|
- |< < … 3 [4] 5
- |< < … 3 4 [5]
关于“点”的说明
如果两个属性{pagination.hasLessPages}
和{pagination.hasMorePages}
不能完全满足您试图设置的方案,请考虑进行自己的计算。以下是一个示例
<!-- instead of {pagination.hasLessPages} which is 'displayRangeStart > 1' internally --> <f:if condition="{pagination.displayRangeStart} > 2"> <li>…</li> </f:if> <!-- instead of {pagination.hasMorePages} which is 'displayRangeEnd < lastPageNumber' internally --> <f:if condition="{pagination.displayRangeEnd + 1} < {pagination.lastPageNumber}"> <li>…</li> </f:if>