Коллекции
Пагинация
Вы можете создать шаблон Blade, который отображает элементы Вашей коллекции в формате с разбивкой на страницы, включив ключ pagination в обложку YAML шаблона. Заголовок разбивки на страницы должен включать имя коллекции collection и счетчик perPage:
posts.blade.php
---
pagination:
collection: posts
perPage: 5
---
@extends('_layouts.master')
...
Если вы не указали значение
perPageв своем шаблоне, значение по умолчанию может быть установлено для конкретной коллекции, добавив ключperPageв настройки коллекции вconfig.php, или глобально, добавив ключperPageк верхнему уровнюconfig.php. В противном случае значение по умолчанию будет 10.
Как только в заголовке будет определена pagination, шаблон получит доступ к специальной переменной $pagination, которая имеет несколько атрибутов:
$pagination->itemsсодержит массив элементов коллекции для текущей страницы$pagination->currentPageсодержит номер текущей страницы$pagination->totalPagesсодержит общее количество страниц$pagination->pagesсодержит массив путей к каждой странице
Обратите внимание, что страницы
pagesиндексируются по их номерам, т.е. они начинаются с 1. Таким образом, Вы можете ссылаться на пути страницы по номеру страницы, т.е.$pagination->page[1]вернет путь к первой странице.
$pagination->firstсодержит путь к первой странице (аналогично$pagination->path[1])$pagination->lastсодержит путь к последней странице$pagination->nextсодержит путь к следующей странице$pagination->previousсодержит путь к предыдущей странице
Используя эти атрибуты $pagination, Вы можете создать набор кнопок и ссылок нумерации страниц:
@if ($previous = $pagination->previous)
<a href="{{ $page->baseUrl }}{{ $pagination->first }}"><<</a>
<a href="{{ $page->baseUrl }}{{ $previous }}"><</a>
@else
<< <
@endif
@foreach ($pagination->pages as $pageNumber => $path)
<a href="{{ $page->baseUrl }}{{ $path }}"
class="{{ $pagination->currentPage == $pageNumber ? 'selected' : '' }}">
{{ $pageNumber }}
</a>
@endforeach
@if ($next = $pagination->next)
<a href="{{ $page->baseUrl }}{{ $next }}">></a>
<a href="{{ $page->baseUrl }}{{ $pagination->last }}">>></a>
@else
> >>
@endif
Чтобы отобразить элементы на каждой странице, выполните итерацию по коллекции $pagination->items:
@foreach ($pagination->items as $post)
<h3><a href="{{ $post->getUrl() }}">{{ $post->title }}</a></h3>
<p class="text-sm">by {{ $post->author }} • {{ date('F j, Y', $post->date) }}</p>
<div>{!! $post->getContent() !!}</div>
@endforeach