Скільки номерів показувати навколо поточної сторінки:
{{ $users->onEachSide(1)->links() }}
За замовчуванням - по три з кожного боку. На мобільних onEachSide(1) робить навігацію компактною.
Вбудовані шаблони: за замовчуванням Laravel генерує розмітку для Tailwind CSS. Для Bootstrap - один раз у провайдері:
// AppServiceProvider::boot()
Paginator::useBootstrapFive();
Власний шаблон для всього застосунку:
php artisan vendor:publish --tag=laravel-pagination
Шаблони копіюються в resources/views/vendor/pagination, і їх можна змінювати. Або вказати свої за замовчуванням:
Paginator::defaultView('pagination.compact');
Paginator::defaultSimpleView('pagination.simple-compact');
Окремий шаблон для конкретного місця:
{{ $users->links('pagination.admin') }}
Параметри в посиланнях:
$users = User::paginate(20)->withQueryString(); // зберегти поточні фільтри
$users = User::paginate(20)->appends(['sort' => 'name']); // додати свої параметри
$users = User::paginate(20)->fragment('users'); // #users наприкінці посилань
$users = User::paginate(20)->withPath('/admin/users'); // інший базовий шлях
fragment корисний, коли список - не на початку сторінки: після переходу браузер прокручує до потрібного блоку.
Кілька пагінаторів на одній сторінці - різні назви параметра, інакше обидва реагують на ?page=:
$posts = Post::paginate(10, pageName: 'posts');
$comments = Comment::paginate(10, pageName: 'comments');
Доступні дані в шаблоні: $paginator->currentPage(), lastPage(), total(), firstItem(), lastItem(), hasMorePages(), previousPageUrl(), nextPageUrl() - з них можна зібрати навігацію будь-якого вигляду.
SEO й доступність у власному шаблоні: справжні посилання <a href> (а не кнопки з JavaScript), rel="prev"/rel="next", aria-current="page" для поточної сторінки, aria-label для стрілок.