Laravel - Настройки-pagination
Здравствуйте, будущие разработчики! Сегодня мы окунемся в чудесный мир настроек pagination в Laravel. Как ваш доброжелательный сосед по компьютерным наукам, я рад помочь вам в этом путешествии. Не волнуйтесь, если вы новички в программировании - мы начнем с азов и будем подниматься. Так что возьмите кружку кофе (или чая, если это ваше дело), и давайте начнем!
Что такое Pagination?
Прежде чем мы перейдем к настройкам, давайте поймем, что такое pagination. Представьте себе книгу с сотнями страниц. Чтение всех сразу было бы перегружено, правда? Вот где на помощь приходит pagination. В веб-разработке pagination - это как разделение вашей книги на управляемые части, показывая ограниченное количество элементов на странице.
Laravel, наш супергеройский фреймворк, приходит с встроенными возможностями pagination, которые упрощают нашу жизнь. Но иногда мы хотим добавить свою изюминку в эти paginated результаты. Вот где настройки становятся полезными!
Основная Pagination в Laravel
Давайте начнем с простого примера, как работает pagination в Laravel:
$users = User::paginate(15);
Эта строка кода извлекает пользователей из базы данных и paginates их, показывая 15 пользователей на странице. Это как магия, не так ли? Но что, если мы хотим сделать эту pagination более красивой? Вот где начинается наше путешествие по настройкам!
Настройка вида Pagination
Шаг 1: Публикация видов Pagination
Сначала нам нужно опубликовать виды pagination Laravel. Не волнуйтесь; это проще, чем кажется! Выполните эту команду в вашем терминале:
php artisan vendor:publish --tag=laravel-pagination
Эта команда как будто говорит Laravel: "Эй, я хочу увидеть эти файлы pagination, чтобы я мог их подправить!"
Шаг 2: Изменение вида
Теперь перейдите в resources/views/vendor/pagination
. Вы найдете здесь несколько файлов. Давайте сосредоточимся на default.blade.php
. Этот файл контролирует, как ваши ссылки pagination выглядят.
Вот простая настройка:
@if ($paginator->hasPages())
<nav>
<ul class="pagination">
{{-- Предыдущая страница --}}
@if ($paginator->onFirstPage())
<li class="disabled"><span>«</span></li>
@else
<li><a href="{{ $paginator->previousPageUrl() }}" rel="prev">«</a></li>
@endif
{{-- Элементы Pagination --}}
@foreach ($elements as $element)
{{-- "Три точки" разделитель --}}
@if (is_string($element))
<li class="disabled"><span>{{ $element }}</span></li>
@endif
{{-- Массив ссылок --}}
@if (is_array($element))
@foreach ($element as $page => $url)
@if ($page == $paginator->currentPage())
<li class="active"><span>{{ $page }}</span></li>
@else
<li><a href="{{ $url }}">{{ $page }}</a></li>
@endif
@endforeach
@endif
@endforeach
{{-- Следующая страница --}}
@if ($paginator->hasMorePages())
<li><a href="{{ $paginator->nextPageUrl() }}" rel="next">»</a></li>
@else
<li class="disabled"><span>»</span></li>
@endif
</ul>
</nav>
@endif
Этот код может показаться пугающим сначала, но давайте разберем его:
- Мы проверяем, есть ли несколько страниц (
$paginator->hasPages()
). - Мы создаем навигацию с unordered list.
- Мы добавляем ссылку "Предыдущая" если мы не на первой странице.
- Мы цикл по элементам pagination, добавляя ссылки для каждой страницы.
- Мы добавляем ссылку "Следующая" если есть еще страницы.
Стилизация вашей Pagination
Теперь, когда мы настроили структуру нашей pagination, давайте сделаем ее красивой! Добавьте следующий CSS в ваш stylesheet:
.pagination {
display: flex;
list-style: none;
padding: 0;
}
.pagination li {
margin: 0 5px;
}
.pagination li a {
text-decoration: none;
padding: 5px 10px;
border: 1px solid #ddd;
color: #333;
}
.pagination li.active span {
background-color: #007bff;
color: white;
padding: 5px 10px;
border: 1px solid #007bff;
}
.pagination li.disabled span {
color: #ccc;
padding: 5px 10px;
border: 1px solid #ddd;
}
Этот CSS придаст вашей pagination чистый, современный вид. Это как надеть nice suit на ваш код!
продвинутые Настройки
Custom Pagination Using Presenter
Для более продвинутых настроек Laravel позволяет нам создать custom presenter. Давайте создадим один:
- Создайте новый файл
app/Http/Presenters/CustomPaginationPresenter.php
:
<?php
namespace App\Http\Presenters;
use Illuminate\Pagination\BootstrapPresenter;
class CustomPaginationPresenter extends BootstrapPresenter
{
public function render()
{
if (!$this->hasPages()) {
return '';
}
return sprintf(
'<div class="custom-pagination">%s %s %s</div>',
$this->getPreviousButton(),
$this->getLinks(),
$this->getNextButton()
);
}
protected function getAvailablePageWrapper($url, $page, $rel = null)
{
$rel = is_null($rel) ? '' : ' rel="' . $rel . '"';
return '<span class="page-item"><a class="page-link" href="' . $url . '"' . $rel . '>' . $page . '</a></span>';
}
protected function getDisabledTextWrapper($text)
{
return '<span class="page-item disabled"><span class="page-link">' . $text . '</span></span>';
}
protected function getActivePageWrapper($text)
{
return '<span class="page-item active"><span class="page-link">' . $text . '</span></span>';
}
}
- Используйте этот custom presenter в вашем контроллере:
use App\Http\Presenters\CustomPaginationPresenter;
public function index()
{
$users = User::paginate(15);
$presenter = new CustomPaginationPresenter($users);
return view('users.index', compact('users', 'presenter'));
}
- В вашем виде, используйте custom presenter:
{!! $presenter->render() !!}
Заключение
Поздравления! Вы только что научились настраивать pagination в Laravel. От основных изменений до продвинутых presenters, теперь у вас есть сила сделать ваши paginated результаты такими, как вы хотите.
Помните, ключ к maîtriser этих концепций - это практика. Попробуйте создать разные стили, экспериментируйте с презентером и, самое главное, получайте удовольствие от этого! Pagination может показаться мелочью, но она может greatly enhance пользовательский опыт вашего приложения.
Заканчивая, вот таблица, резюмирующая методы, которые мы рассмотрели:
Метод | Описание |
---|---|
paginate() |
Основной метод pagination |
vendor:publish |
Публикует виды pagination |
hasPages() |
Проверяет, есть ли несколько страниц |
onFirstPage() |
Проверяет, находимся ли на первой странице |
previousPageUrl() |
Получает URL для предыдущей страницы |
nextPageUrl() |
Получает URL для следующей страницы |
currentPage() |
Получает текущий номер страницы |
hasMorePages() |
Проверяет, есть ли еще страницы |
Продолжайте программировать, продолжайте учиться и помните - каждый великий разработчик начинал как новичок. Вы на пути к тому, чтобы стать профи в pagination Laravel!
Credits: Image by storyset