Постраничная навигация в Laravel

В Laravel функция разбиения контента на страницы интегрирована с Eloquent и методами для построения запросов. Помимо этого вывод совместим с CSS-фреймворком Bootstrap.

Страничный вывод из БД

Использование метода "paginate" - это простейший способ создания постраничной навигации. Его можно использовать как на запросе Eloquent, таки на объекте конструктора запросов. Этот метод автоматически задаёт пределы и отступы текущей страницы, используя GET параметры "page". При этом ссылки для постраничной навигации создаются автоматически. Приведём пример использования:
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\DB;
use App\Http\Controllers\Controller;

class UserController extends Controller {
   public function index() {
      $elementCount = 10; // количество результатов на странице

      $users = DB::table('users')->paginate($elementCount);

      return view('user.index', ['users' => $users]);
   }
}
?>
Этот код сделает выборку из 10 элементов. если же необходимо сделать только ссылки "Далее" и "Назад", а не распечатывать цифры "1, 2, 3, 4, ...", то можно воспользоваться методом
<?php
   $users = DB::table('users')->simplePaginate($elementCount);
?>

Страничный вывод с помощью Eloquent

Попробуем переписать предыдущий пример, используя модель Eloquent. Код будет совпадать за исключением строки запроса данных:
<?php
   $users = App\User::paginate($elementCount);
?>
Конечно, можно добавлять и другие методы для ограничения выборки до вызова метода "paginate". Также можно использовать и метод "simplePaginate":
<?php
   $users = User::where('id', '>', 4)->paginate($elementCount);

   $users = User::where('id', '>', 7)->simplePaginate($elementCount);
?>

Создание постраничной навигации вручную

Иногда приходится создавать экземпляры страничного вывода вручную. Это делается с помощью экземпляра класса Illuminate\Pagination\Paginator или Illuminate\Pagination\LengthAwarePaginator. Для первого класса не нужно определять общее количество элементов в выборке. Поэтому у него нет метода для получения порядкового номера последней страницы. А второй класс наоборот требует определения общего количества элементов в наборе.

Если перефразировать, то "Paginator" работает как метод "simplePaginate" на Eloquent, а "LengthAwarePaginator" работает как "paginate".

Вывод HTML кода постраничной навигации

В результате использования методов "paginate" и "simplePaginate" полуается экземпляр страничного вывода. Для метода "paginate" это экземпляр LengthAwarePaginator. А для метода "simplePaginate" - Paginator. К самим экземплярам можно так же обращаться как к массивам. Но сами объекты содержат методы для вывода результата.

Приведём пример вывода навигации с использованием Blade:
<div class="container">
   @foreach ($users as $user)
      {{ $user->name }}
   @endforeach
</div>

{{ $users->links() }}
Тот же пример, но с использованием PHP и метода "render":
<div class="container">
   <?php foreach ($users as $user){ ?>
      <?php echo $user->name; ?>
   <?php } ?>
</div>

<?php echo $users->render(); ?>

Параметры в ссылках

С помощью метода "appends" можно модифицировать ссылки постраничной навигации, добавляя к ним GET параметры. Этот метода принимает в качестве аргумента массив ключ-значение GET параметров, которые необходимо установить.
{{ $users->appends(['sort' => 'id'])->links() }}
В результате получится ссылка постраничной навигации вида:
https://mousedc.ru/?page=2&sort=id
Если нужно добавить хеш фрагмент (часть ссылки после знака "#"), то используйте метод fragment:
{{ $users->fragment('food')->links() }}
В результате ссылка будет выглядеть так:
https://mousedc.ru/?page=2#food
MouseDC.ru - хостинг, виртуальный хостинг, покупка доменов, проверка доменов, WHOIS, курсы создания сайтов, вебинары по созданию, курсы разработки сайтов, доработка сайтов, сопровождение сайтов, разработка сайтов, техподдержка сайтов
Cмотрите другие статьи:
Была ли статья полезной?
Была ли эта статья полезна? Есть вопрос?
хостинг для сайтов
Закажите недорогой хостинг Заказать

всего от 290 руб