Кастомная пагинация Laravel

Реализация своей пагинации в 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

В 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

Если Вам необходимо внедрить данную разработку на свой проект, свяжитесь со мной, обсудим цену и срок.

Связаться со мной Fill 1