From 62c8c54944c33241b4c11c0b3c06cfe787a62d9f Mon Sep 17 00:00:00 2001 From: Lachlan Heywood Date: Fri, 20 Mar 2020 18:15:57 -0400 Subject: [PATCH] Use framework paginator for better support of magic pagination --- Events/Events.php | 5 +++++ Events/EventsTags.php | 18 ++++++++++++++---- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/Events/Events.php b/Events/Events.php index 7a960a1..4b8af69 100644 --- a/Events/Events.php +++ b/Events/Events.php @@ -68,4 +68,9 @@ public function all($from, $to) return carbon($event->start_date)->setTimeFromTimeString($event->startTime()); })->values(); } + + public function count() + { + return $this->events->count(); + } } diff --git a/Events/EventsTags.php b/Events/EventsTags.php index 5fe2355..1821b09 100755 --- a/Events/EventsTags.php +++ b/Events/EventsTags.php @@ -8,9 +8,10 @@ use Statamic\API\Request; use Spatie\CalendarLinks\Link; use Illuminate\Support\Collection; -use Illuminate\Pagination\Paginator; use Statamic\Addons\Events\EventFactory; +use Statamic\Presenters\PaginationPresenter; use Statamic\Addons\Collection\CollectionTags; +use Illuminate\Pagination\LengthAwarePaginator; class EventsTags extends CollectionTags { @@ -119,8 +120,11 @@ protected function paginate() $events = $this->events->upcoming($this->limit + 1, $this->offset); - $paginator = new Paginator( + $count = $this->events->count(); + + $paginator = new LengthAwarePaginator( $events, + $count, $this->limit, $page ); @@ -129,8 +133,14 @@ protected function paginate() $paginator->appends(Request::all()); $this->paginationData = [ - 'prev_page' => $paginator->previousPageUrl(), - 'next_page' => $paginator->nextPageUrl(), + 'total_items' => $count, + 'items_per_page' => $this->limit, + 'total_pages' => $paginator->lastPage(), + 'current_page' => $paginator->currentPage(), + 'prev_page' => $paginator->previousPageUrl(), + 'next_page' => $paginator->nextPageUrl(), + 'auto_links' => $paginator->render(), + 'links' => $paginator->render(new PaginationPresenter($paginator)) ]; $this->dates = $events->slice(0, $this->limit);