Метод links
Метод links класса LengthAwarePaginator генерирует HTML-код
со ссылками на страницы для пагинированных наборов данных.
Он автоматически создает навигационную панель с номерами страниц,
ссылками "Вперед" и "Назад", а также индикатором текущей страницы.
Метод возвращает экземпляр Illuminate\Support\HtmlString,
который преобразуется в HTML при выводе.
Синтаксис
<?php
$paginator->links($view, $data);
?>
Параметр $view (необязательный) - имя пользовательского
шаблона для оформления навигации.
Параметр $data (необязательный) - массив данных,
передаваемых в шаблон.
Пример
В контроллере получаем пагинированный список и передаем его в представление:
<?php
namespace App\Http\Controllers;
use App\Models\Article;
use Illuminate\Http\Request;
class ArticleController extends Controller
{
public function index()
{
$articles = Article::paginate(15);
return view('articles.index', ['articles' => $articles]);
}
}
?>
В Blade-шаблоне выводим ссылки навигации методом links:
@foreach ($articles as $article)
<div>
<h2>{{ $article->title }}</h2>
<p>{{ $article->text }}</p>
</div>
@endforeach
<div class="pagination">
{{ $articles->links() }}
</div>
Результат выполнения кода (HTML-структура навигации):
<div class="pagination">
<nav>
<ul class="pagination">
<li class="page-item disabled"><span class="page-link">« Previous</span></li>
<li class="page-item active"><span class="page-link">1</span></li>
<li class="page-item"><a class="page-link" href="?page=2">2</a></li>
<li class="page-item"><a class="page-link" href="?page=3">3</a></li>
<li class="page-item"><a class="page-link" href="?page=4">4</a></li>
<li class="page-item"><a class="page-link" href="?page=2">Next »</a></li>
</ul>
</nav>
</div>
Пример
Использование метода links с параметром onEachSide
для ограничения количества отображаемых ссылок:
<?php
use App\Models\Article;
$articles = Article::paginate(10);
$links = $articles->onEachSide(1)->links();
?>
Результат выполнения кода (ссылки только по одной с каждой стороны):
<nav>
<ul class="pagination">
<li class="page-item"><a class="page-link" href="?page=4">4</a></li>
<li class="page-item active"><span class="page-link">5</span></li>
<li class="page-item"><a class="page-link" href="?page=6">6</a></li>
</ul>
</nav>
Пример
Кастомизация внешнего вида навигации с использованием собственного шаблона.
Создадим шаблон pagination.custom:
@if ($paginator->hasPages())
<div class="custom-pagination">
@if ($paginator->onFirstPage())
<span class="disabled">Назад</span>
@else
<a href="{{ $paginator->previousPageUrl() }}">Назад</a>
@endif
@foreach ($elements as $element)
@if (is_string($element))
<span class="dots">{{ $element }}</span>
@endif
@if (is_array($element))
@foreach ($element as $page => $url)
@if ($page == $paginator->currentPage())
<span class="active">{{ $page }}</span>
@else
<a href="{{ $url }}">{{ $page }}</a>
@endif
@endforeach
@endif
@endforeach
@if ($paginator->hasMorePages())
<a href="{{ $paginator->nextPageUrl() }}">Вперед</a>
@else
<span class="disabled">Вперед</span>
@endif
</div>
@endif
Использование кастомного шаблона в контроллере:
<?php
namespace App\Http\Controllers;
use App\Models\Article;
use Illuminate\Http\Request;
class ArticleController extends Controller
{
public function index()
{
$articles = Article::paginate(10);
return view('articles.index', ['articles' => $articles]);
}
}
?>
В Blade-шаблоне передаем имя кастомного представления в метод links:
@foreach ($articles as $article)
<div>
<h2>{{ $article->title }}</h2>
<p>{{ $article->text }}</p>
</div>
@endforeach
<div class="custom-pagination-wrapper">
{{ $articles->links('pagination.custom') }}
</div>
Результат выполнения кода (HTML-структура с кастомными классами):
<div class="custom-pagination-wrapper">
<div class="custom-pagination">
<span class="disabled">Назад</span>
<span class="active">1</span>
<a href="?page=2">2</a>
<a href="?page=3">3</a>
<a href="?page=2">Вперед</a>
</div>
</div>
Смотрите также
-
класс
LengthAwarePaginator,
который предоставляет полную информацию о пагинации -
метод
withQueryString,
который сохраняет параметры запроса в ссылках пагинации -
метод
appends,
который добавляет параметры к ссылкам пагинации -
метод
fragment,
который добавляет якорь к ссылкам пагинации