РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
906 of 1392 menu

Класс Paginator

Класс Paginator является частью системы пагинации Laravel и предназначен для создания постраничной навигации, когда не требуется знать общее количество элементов. В отличие от LengthAwarePaginator, этот класс не предоставляет информацию о последней странице и общем количестве записей, что делает его идеальным для работы с большими наборами данных, где подсчёт общего количества может быть затратным. Класс принимает в конструктор коллекцию элементов, количество элементов на странице и текущую страницу, а также опциональный базовый URL.

Синтаксис

<?php new Paginator($items, $perPage, $currentPage, $options); ?>

Параметр $items содержит коллекцию элементов для текущей страницы, $perPage определяет количество элементов на странице, $currentPage указывает текущую страницу, а $options позволяет передать дополнительные настройки, такие как путь к страницам.

Создание пагинатора через метод make

Laravel предоставляет удобный фасадный метод Paginator::make для создания экземпляра пагинатора:

<?php use IlluminatePaginationPaginator; $items = ['item 1', 'item 2', 'item 3', 'item 4', 'item 5']; $perPage = 2; $currentPage = 1; $paginator = Paginator::make($items, $perPage, $currentPage, [ 'path' => '/users' ]); foreach ($paginator as $item) { echo $item; } ?>

Результат выполнения кода:

"item 1" "item 2"

Использование в контроллере

Рассмотрим пример использования класса Paginator в контроллере для пагинации массива данных:

<?php namespace AppHttpControllers; use IlluminatePaginationPaginator; class UserController extends Controller { public function index() { $users = ['user 1', 'user 2', 'user 3', 'user 4', 'user 5']; $perPage = 2; $currentPage = request()->get('page', 1); $offset = ($currentPage - 1) * $perPage; $items = array_slice($users, $offset, $perPage); $paginator = Paginator::make($items, $perPage, $currentPage, [ 'path' => '/users' ]); return view('users.index', ['users' => $paginator]); } } ?>

Теперь передадим пагинатор в Blade-шаблон для отображения:

@foreach ($users as $user) <div>{{ $user }}</div> @endforeach {{ $users->links() }}

Результат выполнения кода:

<div>user 1</div> <div>user 2</div> <ul class="pagination"> <li class="disabled"><span>«</span></li> <li class="active"><span>1</span></li> <li><a href="/users?page=2">2</a></li> <li><a href="/users?page=3">3</a></li> <li><a href="/users?page=2" rel="next">»</a></li> </ul>

Метод withPath для изменения базового пути

Метод withPath позволяет изменить базовый URL для всех ссылок пагинации:

<?php use IlluminatePaginationPaginator; $items = ['article', 'user', 'category']; $perPage = 1; $currentPage = 1; $paginator = Paginator::make($items, $perPage, $currentPage); $paginator->withPath('/admin/users'); echo $paginator->url(2); ?>

Результат выполнения кода:

"/admin/users?page=2"

Метод appends для добавления параметров запроса

Метод appends добавляет дополнительные параметры к ссылкам пагинации:

<?php use IlluminatePaginationPaginator; $items = ['abcde', 'fghij', 'klmno']; $perPage = 1; $currentPage = 1; $paginator = Paginator::make($items, $perPage, $currentPage, [ 'path' => '/search' ]); $paginator->appends(['sort' => 'desc']); echo $paginator->url(2); ?>

Результат выполнения кода:

"/search?page=2&sort=desc"

Метод onFirstPage для проверки первой страницы

Метод onFirstPage проверяет, находится ли пагинатор на первой странице:

<?php use IlluminatePaginationPaginator; $items = ['item 1', 'item 2', 'item 3']; $perPage = 2; $currentPage = 1; $paginator = Paginator::make($items, $perPage, $currentPage); if ($paginator->onFirstPage()) { echo "On first page"; } else { echo "Not on first page"; } ?>

Результат выполнения кода:

"On first page"

Метод hasMorePages для проверки наличия следующих страниц

Метод hasMorePages проверяет, существуют ли ещё страницы после текущей:

<?php use IlluminatePaginationPaginator; $items = ['item 1', 'item 2', 'item 3', 'item 4']; $perPage = 2; $currentPage = 1; $paginator = Paginator::make($items, $perPage, $currentPage); if ($paginator->hasMorePages()) { echo "Has more pages"; } else { echo "No more pages"; } ?>

Результат выполнения кода:

"Has more pages"

Смотрите также

  • класс LengthAwarePaginator,
    который предоставляет информацию об общем количестве записей
  • класс CursorPaginator,
    который использует курсоры для эффективной пагинации
  • метод links,
    который выводит ссылки для постраничной навигации
  • метод appends,
    который добавляет параметры к ссылкам пагинации
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить