Ручная разбивка на страницы 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(), ]);
Это конечный результат
Полный пример можно найти здесь