diff options
| author | Christian Weiske <cweiske@cweiske.de> | 2026-01-19 08:29:59 +0100 |
|---|---|---|
| committer | Christian Weiske <cweiske@cweiske.de> | 2026-01-19 08:29:59 +0100 |
| commit | 738d98d128059b52b99bda336f5410f3b9b6bd7b (patch) | |
| tree | c898621e58c8461ee6ed16e2ce337636d1180c44 /QueryBuilderPaginator.php | |
| download | 951-738d98d128059b52b99bda336f5410f3b9b6bd7b.tar.gz 951-738d98d128059b52b99bda336f5410f3b9b6bd7b.zip | |
Diffstat (limited to 'QueryBuilderPaginator.php')
| -rw-r--r-- | QueryBuilderPaginator.php | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/QueryBuilderPaginator.php b/QueryBuilderPaginator.php new file mode 100644 index 0000000..02bed79 --- /dev/null +++ b/QueryBuilderPaginator.php @@ -0,0 +1,55 @@ +<?php
+
+declare(strict_types=1);
+
+namespace Vendor\Extension\Helper;
+
+use TYPO3\CMS\Core\Database\Query\QueryBuilder;
+use TYPO3\CMS\Core\Pagination\AbstractPaginator;
+
+/**
+ * Copy of TYPO3\CMS\Extbase\Pagination\QueryResultPaginator
+ * that supports a QueryBuilder as source
+ */
+class QueryBuilderPaginator extends AbstractPaginator
+{
+ private QueryBuilder $queryBuilder;
+
+ private array $paginatedQueryResult;
+
+ public function __construct(
+ QueryBuilder $queryBuilder,
+ int $currentPageNumber = 1,
+ int $itemsPerPage = 10
+ ) {
+ $this->queryBuilder = $queryBuilder;
+ $this->setCurrentPageNumber($currentPageNumber);
+ $this->setItemsPerPage($itemsPerPage);
+
+ $this->updateInternalState();
+ }
+
+ public function getPaginatedItems(): iterable
+ {
+ return $this->paginatedQueryResult;
+ }
+
+ protected function updatePaginatedItems(int $limit, int $offset): void
+ {
+ $this->paginatedQueryResult = $this->queryBuilder
+ ->setMaxResults($limit)
+ ->setFirstResult($offset)
+ ->execute()
+ ->fetchAllAssociative();
+ }
+
+ protected function getTotalAmountOfItems(): int
+ {
+ return (clone $this->queryBuilder)->count('uid')->executeQuery()->fetchOne();
+ }
+
+ protected function getAmountOfItemsOnCurrentPage(): int
+ {
+ return count($this->paginatedQueryResult);
+ }
+}
|
