<f:widget.paginate> 显示控制器提供的更多项目

<f:widget.paginate> show more items then given from controller

在我自己的扩展中,我想限制显示的项目。从我的 flexform 我得到设定值 = 5 EventController.php:

$showMaxItems = (int)$this->settings['event']['maxItems'];

并找到了 maxItems:

$events = $this->eventRepository->findLimited($showMaxItems);

并分配给视图:

$this->view->assign('events', $events);

EventRepository.php

public function findLimited($limit) {
    $query = $this->createQuery();
    return $query->setLimit($limit)
        ->execute();
}

List.html 显示 maxItems

<f:for each="{events}" as="event">
</f:for>

List.html 和 widget.pagination 总是显示 10 个项目

<f:widget.paginate objects="{events}" as="paginatedEvents">
    <f:for each="{paginatedEvents}" as="event">
    </f:for>
</f:widget.paginate>

当我在两个版本的 EventController 中显示调试数据时,我有 5 个项目

\TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($events);

这是我的错误还是 extbase 的错误?我找到 https://forge.typo3.org/issues/79559 但不适合我的问题。

您不需要限制存储库调用,只需让所有对象独立于分页,例如$this->eventRepository->findAll()

在分页视图助手中,您需要配置参数,视图助手会为您做限制:

<f:widget.paginate objects="{events}" as="paginatedEvents" configuration="{itemsPerPage: '{settings.event.maxItems}'}">
  <f:for each="{paginatedEvents}">
    ...
  </f:for>
</f:widget.paginate>

参见:https://fluidtypo3.org/viewhelpers/fluid/master/Widget/PaginateViewHelper.html

那是因为分页小部件覆盖了您通过 setLimit() 设置的限制。

如果您想对具有自定义 Limit 或 Offset 的结果集进行分页,则必须将 QueryResult 转换为数组,然后对其进行分页。