‪TYPO3CMS  ‪main
SlidingWindowPagination.php
Go to the documentation of this file.
1 <?php
2 
3 declare(strict_types=1);
4 
5 /*
6  * This file is part of the TYPO3 CMS project.
7  *
8  * It is free software; you can redistribute it and/or modify it under
9  * the terms of the GNU General Public License, either version 2
10  * of the License, or any later version.
11  *
12  * For the full copyright and license information, please read the
13  * LICENSE.txt file that was distributed with this source code.
14  *
15  * The TYPO3 project - inspiring people to share!
16  */
17 
19 
21 {
22  protected int ‪$displayRangeStart = 0;
23  protected int ‪$displayRangeEnd = 0;
24  protected bool ‪$hasLessPages = false;
25  protected bool ‪$hasMorePages = false;
26  protected int ‪$maximumNumberOfLinks = 0;
28 
30  {
31  $this->paginator = ‪$paginator;
32 
33  if (‪$maximumNumberOfLinks > 0) {
34  $this->maximumNumberOfLinks = ‪$maximumNumberOfLinks;
35  }
36 
37  $this->‪calculateDisplayRange();
38  }
39 
40  public function ‪getPreviousPageNumber(): ?int
41  {
42  $previousPage = $this->paginator->getCurrentPageNumber() - 1;
43 
44  if ($previousPage > $this->paginator->getNumberOfPages()) {
45  return null;
46  }
47 
48  return $previousPage >= $this->‪getFirstPageNumber() ? $previousPage : null;
49  }
50 
51  public function ‪getNextPageNumber(): ?int
52  {
53  $nextPage = $this->paginator->getCurrentPageNumber() + 1;
54 
55  return $nextPage <= $this->paginator->getNumberOfPages() ? $nextPage : null;
56  }
57 
58  public function ‪getFirstPageNumber(): int
59  {
60  return 1;
61  }
62 
63  public function ‪getLastPageNumber(): int
64  {
65  return $this->paginator->getNumberOfPages();
66  }
67 
68  public function ‪getStartRecordNumber(): int
69  {
70  if ($this->paginator->getCurrentPageNumber() > $this->paginator->getNumberOfPages()) {
71  return 0;
72  }
73 
74  return $this->paginator->getKeyOfFirstPaginatedItem() + 1;
75  }
76 
77  public function ‪getEndRecordNumber(): int
78  {
79  if ($this->paginator->getCurrentPageNumber() > $this->paginator->getNumberOfPages()) {
80  return 0;
81  }
82 
83  return $this->paginator->getKeyOfLastPaginatedItem() + 1;
84  }
85 
86  public function ‪getAllPageNumbers(): array
87  {
88  return range($this->displayRangeStart, $this->displayRangeEnd);
89  }
90 
91  public function ‪getDisplayRangeStart(): int
92  {
94  }
95 
96  public function ‪getDisplayRangeEnd(): int
97  {
99  }
100 
101  public function ‪getHasLessPages(): bool
102  {
103  return ‪$this->hasLessPages;
104  }
105 
106  public function ‪getHasMorePages(): bool
107  {
108  return ‪$this->hasMorePages;
109  }
110 
111  public function ‪getMaximumNumberOfLinks(): int
112  {
114  }
115 
117  {
118  return ‪$this->paginator;
119  }
120 
121  protected function ‪calculateDisplayRange(): void
122  {
124  $numberOfPages = $this->paginator->getNumberOfPages();
125 
126  if (‪$maximumNumberOfLinks > $numberOfPages) {
127  ‪$maximumNumberOfLinks = $numberOfPages;
128  }
129 
130  $currentPage = $this->paginator->getCurrentPageNumber();
131  $delta = floor(‪$maximumNumberOfLinks / 2);
132 
133  $this->displayRangeStart = (int)($currentPage - $delta);
134  $this->displayRangeEnd = (int)($currentPage + $delta - (‪$maximumNumberOfLinks % 2 === 0 ? 1 : 0));
135 
136  if ($this->displayRangeStart < 1) {
137  $this->displayRangeEnd -= $this->displayRangeStart - 1;
138  }
139 
140  if ($this->displayRangeEnd > $numberOfPages) {
141  $this->displayRangeStart -= $this->displayRangeEnd - $numberOfPages;
142  }
143 
144  $this->displayRangeStart = (int)max($this->displayRangeStart, 1);
145  $this->displayRangeEnd = (int)min($this->displayRangeEnd, $numberOfPages);
146  $this->hasLessPages = $this->displayRangeStart > 2;
147  $this->hasMorePages = $this->displayRangeEnd + 1 < $this->paginator->getNumberOfPages();
148  }
149 }
‪TYPO3\CMS\Core\Pagination\SlidingWindowPagination\getNextPageNumber
‪getNextPageNumber()
Definition: SlidingWindowPagination.php:51
‪TYPO3\CMS\Core\Pagination\PaginationInterface
Definition: PaginationInterface.php:27
‪TYPO3\CMS\Core\Pagination\SlidingWindowPagination\getLastPageNumber
‪getLastPageNumber()
Definition: SlidingWindowPagination.php:63
‪TYPO3\CMS\Core\Pagination\SlidingWindowPagination\getDisplayRangeEnd
‪getDisplayRangeEnd()
Definition: SlidingWindowPagination.php:96
‪TYPO3\CMS\Core\Pagination\SlidingWindowPagination\$hasMorePages
‪bool $hasMorePages
Definition: SlidingWindowPagination.php:25
‪TYPO3\CMS\Core\Pagination
Definition: AbstractPaginator.php:18
‪TYPO3\CMS\Core\Pagination\SlidingWindowPagination\$maximumNumberOfLinks
‪int $maximumNumberOfLinks
Definition: SlidingWindowPagination.php:26
‪TYPO3\CMS\Core\Pagination\SlidingWindowPagination\getMaximumNumberOfLinks
‪getMaximumNumberOfLinks()
Definition: SlidingWindowPagination.php:111
‪TYPO3\CMS\Core\Pagination\SlidingWindowPagination\$displayRangeEnd
‪int $displayRangeEnd
Definition: SlidingWindowPagination.php:23
‪TYPO3\CMS\Core\Pagination\SlidingWindowPagination\getStartRecordNumber
‪getStartRecordNumber()
Definition: SlidingWindowPagination.php:68
‪TYPO3\CMS\Core\Pagination\SlidingWindowPagination\$hasLessPages
‪bool $hasLessPages
Definition: SlidingWindowPagination.php:24
‪TYPO3\CMS\Core\Pagination\PaginatorInterface
Definition: PaginatorInterface.php:25
‪TYPO3\CMS\Core\Pagination\SlidingWindowPagination\getEndRecordNumber
‪getEndRecordNumber()
Definition: SlidingWindowPagination.php:77
‪TYPO3\CMS\Core\Pagination\SlidingWindowPagination\$paginator
‪PaginatorInterface $paginator
Definition: SlidingWindowPagination.php:27
‪TYPO3\CMS\Core\Pagination\SlidingWindowPagination\getHasLessPages
‪getHasLessPages()
Definition: SlidingWindowPagination.php:101
‪TYPO3\CMS\Core\Pagination\SlidingWindowPagination\getFirstPageNumber
‪getFirstPageNumber()
Definition: SlidingWindowPagination.php:58
‪TYPO3\CMS\Core\Pagination\SlidingWindowPagination\getDisplayRangeStart
‪getDisplayRangeStart()
Definition: SlidingWindowPagination.php:91
‪TYPO3\CMS\Core\Pagination\SlidingWindowPagination\getAllPageNumbers
‪getAllPageNumbers()
Definition: SlidingWindowPagination.php:86
‪TYPO3\CMS\Core\Pagination\SlidingWindowPagination\__construct
‪__construct(PaginatorInterface $paginator, int $maximumNumberOfLinks=0)
Definition: SlidingWindowPagination.php:29
‪TYPO3\CMS\Core\Pagination\SlidingWindowPagination\$displayRangeStart
‪int $displayRangeStart
Definition: SlidingWindowPagination.php:22
‪TYPO3\CMS\Core\Pagination\SlidingWindowPagination\getPreviousPageNumber
‪getPreviousPageNumber()
Definition: SlidingWindowPagination.php:40
‪TYPO3\CMS\Core\Pagination\SlidingWindowPagination\getPaginator
‪getPaginator()
Definition: SlidingWindowPagination.php:116
‪TYPO3\CMS\Core\Pagination\SlidingWindowPagination\calculateDisplayRange
‪calculateDisplayRange()
Definition: SlidingWindowPagination.php:121
‪TYPO3\CMS\Core\Pagination\SlidingWindowPagination
Definition: SlidingWindowPagination.php:21
‪TYPO3\CMS\Core\Pagination\SlidingWindowPagination\getHasMorePages
‪getHasMorePages()
Definition: SlidingWindowPagination.php:106