georgringer/numbered-pagination

2.0.0 2023-10-05 09:11 UTC

This package is auto-updated.

Last update: 2024-08-25 07:39:18 UTC


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.firstli.last并注释掉li.prevli.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.firstli.last(并将它们重命名为|<>|)并将它们的位置与li.prevli.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>