Может войдёшь?
Черновики Написать статью Профиль

Настройка шаблонов страничного вывода в Laravel 5.3

перевод новое в 5.3

В Laravel отличная библиотека страничного вывода, потому что страничный вывод является одной из основных задач, а библиотека берёт на себя почти всю работу. Раньше изменять свои шаблоны страничного вывода было так же просто, как и работать с самой библиотекой.

Но в целях упрощения экспорта библиотеки страничного вывода в проекты на других фреймворках, в Laravel 5.0 (а может и раньше) появилась намного более сложная — но более переносимая — система шаблонов страничного вывода.

К счастью, в Laravel 5.3 всё стало так, как раньше — легко и просто.

Как работает страничный вывод в Laravel

Для тех, кто не знаком со страничным выводом Laravel, вот краткий обзор того, как он работает.

PHP
// файл с маршрутами
Route::get('tasks', function () {
  return 
view('tasks.index')
        ->
with('tasks'Task::paginate(10));
});
PHP
// resource/views/tasks/index.blade.php
@foreach ($tasks as $task)
  <!-- 
вывод задачи или чего-то другого -->
@endforeach

{{ 
$tasks->links() }}

По умолчанию метод PHPpaginate() на ваших объектах Eloquent читает параметры вашего запроса и определяет, на какой странице вы находитесь. В данном примере он прочитает параметр ?page и возьмёт 10 записей для этой страницы. Он передаст эти 10 записей, и когда мы пойдём циклом PHPforeach по переменной PHP$tasks, то цикл будет идти по этим 10 записям.

Но если вы получите эти 10 записей с помощью именно PHPpaginate(), вместо чего-то наподобие PHPall(), то вам будет доступен новый метод на объекте PHP$tasks (или другом результате Eloquent) — это метод PHPlinks(), он возвращает строку представления, предназначенную для вывода списка кнопок перехода по страницам:

xml<ul class="pagination">
  <li class="disabled"><span>&laquo;</span></li>

  <li class="active"><span>1</span></li>
  <li><a href="http://53pagination.dev?page=2">2</a></li>
  <li><a href="http://53pagination.dev?page=3">3</a></li>

  <li><a href="http://53pagination.dev?page=2" rel="next">&raquo;</a></li>
</ul>

Настройка шаблона страничного вывода в Laravel 5.3

Хорошо, давайте приступим к делу. Как настроить этот шаблон в 5.3?

Отвечающий за отрисовку шаблон по умолчанию находится в компоненте PHPIlluminate\Pagination в файле resources/views/bootstrap-3.blade.php. Сейчас он выглядит так:

xml<ul class="pagination">
  <!-- Ссылка на предыдущую страницу -->
  @if ($paginator->onFirstPage())
    <li class="disabled"><span>&laquo;</span></li>
  @else
    <li><a href="{{ $paginator->previousPageUrl() }}" rel="prev">&laquo;</a></li>
  @endif

  <!-- Элементы страничной навигации -->
  @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">&raquo;</a></li>
  @else
    <li class="disabled"><span>&raquo;</span></li>
  @endif
</ul>

Для настройки страничного вывода есть два способа: публиковать встроенное представление и редактировать его, или создать новый файл и вручную привязать PHPPaginator к нему.

Публикация файлов

Наверное самый простой способ — выполнить shphp artisan vendor:publish. Эта команда опубликует шаблон в vendor/pagination, и вы сможете просто отредактировать его там. Этот вариант предпочтительнее, когда вам не нужны какие-либо специфические настройки.

Ручная привязка файлов

Вы можете создать свой собственный файл страничного вывода и привязаться к нему вручную. Создайте новый файл, дублирующий оригинал, и отредактируйте его в соответствии с вашими задачами. Сохраните его куда-нибудь в resources/views. Пока для простоты используем resources/views/partials/pagination.blade.php.

Теперь зарегистрируем его. Запустите PHP\Illuminate\Pagination\LengthAwarePaginator::defaultView('partials.paginator') в методе PHPboot() поставщика услуг (service provider).

Если вы хотите настроить шаблон только для одного конкретного PHPPaginator, вы можете передать имя представления в метод PHPlinks():

PHP{{ $users->links('partials.paginator') }}

Резюме

Итак, для того, чтобы это всё заработало, я сделал следующее:

  1. Клонировал самую свежую версию Laravel 5.3
  2. Выполнил Composer install
  3. Выполнил shphp artisan vendor:publish
  4. Отредактировал resources/views/vendor/pagination/default.blade.php и настроил его на свой вкус

Вот и всё!

Эта инструкция показывает, как настроить Paginator с известной длиной, который встречается чаще всего. Но если вы работаете с простым PHPPaginator, то его тоже можно настроить — в качестве основы используйте файл simple-default вместо default.

Как вы считаете, полезен ли этот материал? Да Нет

Написать комментарий

Разметка: ? ?

Авторизуйся, чтобы прокомментировать.