1

我正在使用ArrayPaginator我的 Extbase 列表视图,因为在 TYPO3 v11 中将不再提供 Fluid 小部件功能。

我目前正在尝试使用 RouteEnhancer。

我的列表操作只接收当前页面的参数作为整数。

RouteEnhancer 的代码如下所示:

  RefList:
    type: Extbase
    limitToPages:
      - 142
    extension: Ref
    plugin: Pi2
    routes:
      -
        routePath: /seite-{page}
        _controller: 'Ref::list'
        _arguments:
          page: currentPage
    defaultController: 'Ref::list'
    requirements:
      page: \d+
    aspects:
      page:
        type: StaticRangeMapper
        start: '1'
        end: '1000'

我已经看到了很多包含@widget_0/currentPage参数值的流体分页小部件的示例page

如果我切换到另一个页面,则 URL 生成正确,但列表视图中显示的内容仍与第 1 页相同。

我在这里想念什么?

4

2 回答 2

1

您可以使用 QueryResultPaginator 而不是 ArrayPaginator。

路线

routeEnhancers:
  RefList:
    type: Extbase
    extension: Ref
    plugin: Pi2
    routes:
      - routePath: '/'
        _controller: 'Ref::list'
      - routePath: '/{page}'
        _controller: 'Ref::list'
        _arguments:
          page: current-page
    defaultController: 'Ref::list'
    aspects:
      current-page:
        type: StaticRangeMapper
        start: '1'
        end: '100'

RefController.php从请求中获取当前页面

public function listAction()
{
    $refs = $this->refRepository->findAll();

    $currentPage = $this->request->hasArgument('current-page') ? $this->request->getArgument('current-page') : 1;
    $paginatedRefs = new QueryResultPaginator($refs, $currentPage, $this->itemsPerPage);
    $simplePagination = new SimplePagination($paginatedRefs);
    $pagination = $this->buildSimplePagination($simplePagination, $paginatedRefs);

    $this->view->assignMultiple([
        'refs' => $paginatedRefs,
        'pagination' => $pagination,
    ]);
}


/**
 * Build simple pagination
 *
 * @param SimplePagination $simplePagination
 * @param QueryResultPaginator $paginator
 * @return array
 */
protected function buildSimplePagination(SimplePagination $simplePagination, QueryResultPaginator $paginator): array
{
    $firstPage = $simplePagination->getFirstPageNumber();
    $lastPage = $simplePagination->getLastPageNumber();
    return [
        'lastPageNumber' => $lastPage,
        'firstPageNumber' => $firstPage,
        'nextPageNumber' => $simplePagination->getNextPageNumber(),
        'previousPageNumber' => $simplePagination->getPreviousPageNumber(),
        'startRecordNumber' => $simplePagination->getStartRecordNumber(),
        'endRecordNumber' => $simplePagination->getEndRecordNumber(),
        'currentPageNumber' => $paginator->getCurrentPageNumber(),
        'pages' => range($firstPage, $lastPage)
    ];
}

List.html添加分页模板

<f:for each="{refs.paginatedItems}" as="ref">
    <f:render partial="List/ListItem" arguments="{ref: ref}" />
</f:for>
<f:render partial="List/Pagination" arguments="{pagination:pagination, action:'list'}" />

部分列表/Pagination.html

添加分页链接:previous

<f:link.action action="{action}" arguments="{current-page:pagination.previousPageNumber}">previous</f:link.action>

添加分页链接:pages

<f:link.action action="{action}" arguments="{current-page:page}">{page}</f:link.action>

添加分页链接:next

<f:link.action action="{action}" arguments="{current-page: pagination.nextPageNumber}">next</f:link.action>
于 2022-02-13T13:57:47.277 回答
0

我找到了解决方法。在控制器列表操作中: $currentPage = (int) ($_GET['tx_ref_pi2']['currentPage'] ?? 1);

于 2022-02-11T13:32:32.000 回答