项目作者: iranianpep

项目描述 :
A powerful PHP pagination engine to take care of pagination hassles
高级语言: PHP
项目地址: git://github.com/iranianpep/paginator.git
创建时间: 2018-09-20T07:09:36Z
项目社区:https://github.com/iranianpep/paginator

开源协议:MIT License

下载


Paginator

A powerful PHP pagination engine to take care of pagination hassles

Build Status
Maintainability
Test Coverage
StyleCI
Issue Count
Codacy Badge

Server Requirements

  • PHP >= 7.1

Installation

  • Using Composer get the latest version:
    1. composer require paginator/paginator

Example

The simplest way to use Paginator is as follow:

  1. $totalItems = 3;
  2. $perPage = 1;
  3. $currentPage = 1;
  4. $url = 'https://example.com';
  5. $paginator = new Paginator($totalItems, $perPage, $currentPage, $url);
  6. if ($paginator->hasPages() === true) {
  7. if ($paginator->getPreviousPage()) {
  8. $previousPageUrl = $paginator->getPreviousPageUrl();
  9. echo "<li><a href='{$previousPageUrl}'>Previous</a></li>";
  10. }
  11. foreach ($paginator->getPages() as $page) {
  12. if (!$page instanceof Page) {
  13. continue;
  14. }
  15. $pageNumber = $page->getNumber();
  16. $pageUrl = $page->getUrl();
  17. $cssClass = $page->isCurrent() === true ? 'active' : '';
  18. echo "<li class='{$cssClass}'><a href='{$pageUrl}'>{$pageNumber}</a></li>";
  19. }
  20. if ($paginator->getNextPage()) {
  21. $nextPageUrl = $paginator->getNextPageUrl();
  22. echo "<li><a href='{$nextPageUrl}'>Next</a></li>";
  23. }
  24. }

If you are using any MVC framework like Laravel instantiate an object from Paginator class in the controller and pass it to the view:

Controller

  1. public function index(Request $request)
  2. {
  3. $totalProductsNumber = 10;
  4. $perPage = 10;
  5. $currentPageNumber = (int) $request->get('page') > 0 ? $request->get('page') : 1;
  6. $url = $request->fullUrl();
  7. $paginator = new Paginator($totalProductsNumber, $perPage, $currentPageNumber, $url);
  8. // you should use the offset in your database query to get a slice of data
  9. $offset = $paginator->calculateDatabaseOffset($currentPageNumber);
  10. return view('view.index', [
  11. 'paginator' => $paginator
  12. ]);
  13. }

View (Laravel Blade)

  1. @if ($paginator->hasPages())
  2. <ul class="pagination">
  3. @if ($paginator->isOnFirstPage() === true)
  4. <li class="page-item disabled"><span class="page-link">«</span></li>
  5. @else
  6. <li class="page-item"><a class="page-link" href="{{ $paginator->getPreviousPageUrl() }}" rel="prev" title="Previous">«</a></li>
  7. @endif
  8. @php
  9. $hiddenRanges = $paginator->getHiddenRanges();
  10. @endphp
  11. @foreach ($paginator->getPages() as $page)
  12. {{-- "Three Dots" Separator --}}
  13. @if ((isset($hiddenRanges[0]) && $page->getNumber() === $hiddenRanges[0]['start']) ||
  14. (isset($hiddenRanges[1]) && $page->getNumber() === $hiddenRanges[1]['start']))
  15. <li class="page-item disabled"><span class="page-link">...</span></li>
  16. @elseif((isset($hiddenRanges[0]) && $page->getNumber() > $hiddenRanges[0]['start'] && $page->getNumber() <= $hiddenRanges[0]['finish']) ||
  17. (isset($hiddenRanges[1]) && $page->getNumber() > $hiddenRanges[1]['start'] && $page->getNumber() <= $hiddenRanges[1]['finish']))
  18. @continue
  19. @else
  20. @if ($page->isCurrent())
  21. <li class="page-item active"><span class="page-link">{{ $page->getNumber() }}</span></li>
  22. @else
  23. <li class="page-item"><a class="page-link" href="{{ $page->getUrl() }}" title="Page">{{ $page->getNumber() }}</a></li>
  24. @endif
  25. @endif
  26. @endforeach
  27. @if ($paginator->isOnLastPage() === false)
  28. <li class="page-item"><a class="page-link" href="{{ $paginator->getNextPageUrl() }}" rel="next" title="Next">»</a></li>
  29. @else
  30. <li class="page-item disabled"><span class="page-link">»</span></li>
  31. @endif
  32. </ul>
  33. @endif