Реализация своей пагинации в Laravel, OrctoberCms, WinterCms и подобных
Под капотом уже имеется удобная пагинация, но чтобы сделать свою пагинацию можно использовать LengthAwarePaginator.
К примеру мне нужно вывести постраничную навигацию для своего массива ($items).
use Illuminate\Pagination\LengthAwarePaginator;
use Illuminate\Http\Request;
// Получаем текуюущю страницу из url, например &page=1
$currentPage = LengthAwarePaginator::resolveCurrentPage();
// Создаём новую коллекцию Laravel из данных массива
$itemCollection = collect($items);
// Указываем сколько элментов выводить на странице
$perPage = 10;
// Магия
$currentPageItems = $itemCollection->slice(($currentPage * $perPage) - $perPage, $perPage)->all();
$paginatedItems= new LengthAwarePaginator($currentPageItems , count($itemCollection), $perPage);
// Задаем URL-путь для сгенерированных ссылок
$paginatedItems->setPath($request->url());
В OctoberCms потом можем вывести к примеру так:
$this['items']->setPath($this->currentPageUrl());
Добавим кнопки вперед / назад
$this['nextPage'] = $this['items']->nextPageUrl();
$this['prevPage'] = $this['items']->previousPageUrl();
Пример разметки ссылок:
<div class="page__pagination hidden">
{% if prevPage %}<a class="link--arrow_back" href="{{ prevPage }}">Предыдущая страница</a>{% endif %}
{% if nextPage %}<a class="link--arrow" href="{{ nextPage }}">Следующая страница</a>{% endif %}
</div>
Опубликовано 25 ноября 2022 г. в категориях: October CMS Laravel Winter CMS
Если Вам необходимо внедрить данную разработку на свой проект, свяжитесь со мной, обсудим цену и срок.