Ручная разбивка на страницы Laravel

В этом руководстве объясняется, как вручную создать пагинатор в Laravel. Чтобы лучше понять это руководство, вы уже должны быть знакомы с функциями разбиения на страницы в Laravel; simplePaginate () и Paginate (). Если нет, то можете прочитать о них здесь.

Недавно я столкнулся с проблемой разбивки на страницы массива данных. Мои данные поступали из двух разных источников: API и моя база данных. Полученные результаты были объединены и отсортированы в один массив, и мне нужно было разбить его на страницы, прежде чем вернуться к моему представлению. Это стало проблемой, поскольку Laravel paginate работает только с красноречивыми запросами и Query Builder.

Давайте начнем.

Допустим, у вас есть массив таких данных;

И вам нужно вернуть этот массив в формате с разбивкой на страницы, например:

Прежде всего, вам нужно использовать функцию PHP под названием array_slice (). Эта функция получает эти параметры; имя массива, начальная позиция, длина среза и ключи сохранения (true или false).

Он просто нарезает массив и возвращает выдержку из этого фрагмента.

$total=count($array);
$per_page = 5;
$current_page = $request->input("page") ?? 1;

$starting_point = ($current_page * $per_page) - $per_page;

$array = array_slice($array, $starting_point, $per_page, true);

а) $ array - это фактические данные массива, которые вы хотите разбить на страницы.

б) $ начальная_позиция - это ваша текущая страница * количество результатов, которые вы хотите отображать на странице, минус количество результатов, которые вы хотите отображать на странице.

c) $ per_page (длина фрагмента) - это общее количество возвращаемых значений.

г) $ current_page может быть возвращен как параметр запроса, например? page = 1 или? page = 2. Ваше значение зависит от того, на какой странице вы находитесь (по умолчанию установите одну).

Подсказка, на ваш взгляд, получите значение текущей страницы из параметра запроса в URL-адресе. Добавьте 1 к значению, чтобы перейти на следующую страницу или минус 1, чтобы перейти на предыдущую страницу.

Кроме того, получить общее количество страниц, если текущая страница равна общему количеству возвращенных страниц, деактивирует следующую кнопку, а если текущая страница равна 1 или не установлена, деактивирует предыдущую кнопку.

После нарезки передайте результат в экземпляр Laravel Paginator следующим образом.

$array= new Paginator($array, $total, $per_page, $current_page, [
    'path' => $request->url(),
    'query' => $request->query(),
]);

Это конечный результат

Полный пример можно найти здесь