Files
oai-symfony/typo3conf/ext/paginatedprocessors/Classes/Processing/DataToPaginatedData.php
2026-07-03 17:53:31 +02:00

60 lines
2.9 KiB
PHP

<?php
namespace Brightside\Paginatedprocessors\Processing;
use TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer;
use TYPO3\CMS\Core\Pagination\ArrayPaginator;
use TYPO3\CMS\Core\Pagination\SimplePagination;
class DataToPaginatedData {
public function getPaginatedData (
ContentObjectRenderer $cObj,
array $contentObjectConfiguration,
array $processorConfiguration,
array $allProcessedData,
array $dataToPaginate,
string $paginatedDataArrayKey
) {
$paginationSettings = $processorConfiguration['pagination.'];
$uniquePaginatorId = $cObj->stdWrapValue('uniqueId', $paginationSettings ?? []);
$uniquePaginatorIdKey = $cObj->getRequest()->getQueryParams()['paginatorId'] ?? null;
if($uniquePaginatorId == $uniquePaginatorIdKey) {
$currentPage = (int)$cObj->getRequest()->getQueryParams()['paginationPage'] ? : 1;
} else {
$currentPage = 1;
}
$uniquePaginatorName = $cObj->stdWrapValue('uniquePaginatorName', $paginationSettings ?? []);
if ($uniquePaginatorName) {
$paginationArray = 'pagination_' . $uniquePaginatorId;
} else {
$paginationArray = 'pagination';
}
$itemsToPaginate = $dataToPaginate;
$itemsPerPage = (int)($cObj->stdWrapValue('itemsPerPage', $paginationSettings ?? [])) ? : 10;
$pageLinksShown = (int)($cObj->stdWrapValue('pageLinksShown', $paginationSettings ?? [])) ? : 0;
$anchorActive = (int)($cObj->stdWrapValue('anchorActive', $paginationSettings ?? [])) ? : 0;
$anchorId = (int)($cObj->stdWrapValue('anchorId', $paginationSettings ?? [])) ? : 0;
$paginator = new ArrayPaginator($itemsToPaginate, $currentPage, $itemsPerPage);
$pagination = new SimplePagination($paginator);
$allProcessedData = array_diff_key($allProcessedData, array_flip([$paginatedDataArrayKey]));
$paginatedData = array(
$paginatedDataArrayKey => $paginator->getPaginatedItems(),
$paginationArray => array(
'uniqueId' => $uniquePaginatorId,
'numberOfPages' => $paginator->getNumberOfPages(),
'currentPageNumber' => $paginator->getCurrentPageNumber(),
'keyOfFirstPaginatedItem' => $paginator->getKeyOfFirstPaginatedItem(),
'keyOfLastPaginatedItem' => $paginator->getKeyOfLastPaginatedItem(),
'allPageNumbers' => $pagination->getAllPageNumbers(),
'previousPageNumber' => $pagination->getPreviousPageNumber(),
'nextPageNumber' => $pagination->getNextPageNumber(),
'uniquePaginatorName' => $uniquePaginatorName,
'pageLinksShown' => $pageLinksShown,
'anchorActive' => $anchorActive,
'anchorId' => $anchorId,
)
);
$allProcessedData = array_merge($allProcessedData, $paginatedData);
return $allProcessedData;
}
}