Laravel Pagination.На первой странице необходимо отображать меньше объектов, чем на остальных - PullRequest
0 голосов
/ 11 июня 2019

Предположим, у меня есть Post модель. Сделать нумерацию страниц:

$posts = Post::paginate(10);

В шаблоне я могу проверить, является ли текущая страница первой:

@if($posts->currentPage()==1)
    // here before the posts display something else on the first page
    // ...
@endif

Затем отобразите заголовки сообщений с их изображением и описанием:

@foreach($posts as $post)
    <div>{{ $post->img }}<\div>
    <div>{{ $post->title }}<\div>
    <div>{{ $post->description }}<\div>
@endforeach

Чтобы первая страница не была перегружена и быстро загружена, мне нужно сделать на ней 4 сообщения, а не 10, как на других страницах.

Мне нужно, чтобы от 5 до 10 постов были на второй странице и не потерялись. То есть мне нужно вычесть количество постов из смещения , в данном случае это 6 на всех страницах, кроме первой. Я не знаю, как редактировать смещение .

paginate () вызывает метод из класса Illuminate \ Database \ Eloquent \ Builder , где метод forPage () из Illuminate \ База данных \ Query \ Builder называется. Он вызывает метод skip () , который изменяет смещение . Здесь трудность состоит в том, что я не знаю, как передать свой параметр $ delta_offset = 6 в этот метод, что бы исправить смещение ? В конце концов, пакеты в поставщике не меняются ... Я подумал, что могу унаследовать от класса Illuminate \ Database \ Eloquent \ Builder и создать собственный метод разбивки на страницы в своем классе для передачи параметра, но в этом случае я не могу использовать свой метод на модели следующим образом:

$posts = Post::myPaginate(10);

ORM в этом случае ищет метод myPaginate () в классе Подсветка \ База данных \ Запрос \ Builder .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...