У меня есть UserController
, который имеет метод index()
, который получает все конгрессы, организованные пользователем с помощью "$congresses = $user->congresses()->get();
". Затем в представлении, которое я показываю, например, draftCongresses, это конгрессы, для которых в столбце состояния указано «D», например:
@foreach($congresses->filter(function ($item) { return $item->draftCongresses(); }) as $congress)
<li class="list-group-item">
<p class="font-size-xsm"><i class="fa fa-calendar" aria-hidden="true"></i>
{{$congress->start_date->formatLocalized('%a, %b %d, %Y - %H:%M')}}</p>
<h5 class="card-title">
{{$congress->name}}</h5>
<a href="{{route('congress.manage', ['id' => $congress->id])}}" class="btn btn-outline-primary font-size-sm">Panel</a>
</li>
@endforeach
Я хочу иметь пагинацию для этих результатов, чтобы перемещаться между черновиками конгрессов. По умолчанию я просто хочу показать 5 конгрессов, тогда я хочу иметь нумерацию страниц для навигации между другими конгрессами.
Я не понимаю, как использовать метод laravel paginate()
, потому что конгрессы получаются с "$congresses = $user->congresses()->get();
", но затем в представлении есть разные foreach
, один foreach для отображения pastCongresses
, другой для отображения publishedCongresses
и другие, чтобы показать draftCongresses
.
Знаете ли вы, как добиться нумерации страниц для каждого foreach в этом сценарии? Поскольку существует только один маршрут, который возвращает все конгрессы, организованные пользователем, в представление, а затем каждый foreach показывает необходимые результаты в каждой вкладке.
// пользовательский контроллер, который возвращает все конгрессы, организованные пользователем auth, в представление
class UserController extends Controller
{
public function index(){
$user = Auth::user();
$congresses = $user->congresses()->get();
return view('users.index', compact('user','registrations', 'congresses', $congresses));
}
}
Конгресс-модель:
class Congress extends Model
{
public function pastCongresses(): bool
{
return $this->end_date < now();
}
public function draftCongresses(): bool
{
return $this->status == 'D';
}
public function publishedCongresses(): bool
{
return $this->status == 'P';
}
}
Путь к этому виду:
Route::get('/user/profile', [
'uses' => 'UserController@index',
'as' =>'user.index'
]);
// Просмотр, в котором есть вкладки для отображения прошлых конгрессов, черновиков конгрессов и опубликованных конгрессов.
<div class="tab-pane clearfix fade" id="myCongresses" role="tabpanel" aria-labelledby="contact-tab">
<div class="d-flex mb-3">
<ul class="nav nav-pills">
<li class="nav-item">
<a class="nav-link active border" href="#draftCongresses" data-toggle="tab"
role="tab">Draft congresses</a>
</li>
<li class="nav-item">
<a class="nav-link border" href="#publishedCongresses" data-toggle="tab"
role="tab">Published</a>
</li>
<li class="nav-item">
<a class="nav-link border" href="#pastCongresses" data-toggle="tab"
role="tab">Past Congresses</a>
</li>
</ul>
</div>
<div class="tab-content bg-white" id="myTabContent">
<div class="tab-pane fade active show clearfix" id="draftCongresses" role="tabpanel"
aria-labelledby="home-tab">
<ul class="list-group">
@foreach($congresses->filter(function ($item) { return $item->draftCongresses(); }) as $congress)
<li class="list-group-item">
<p class="font-size-xsm"><i class="fa fa-calendar" aria-hidden="true"></i>
{{$congress->start_date->formatLocalized('%a, %b %d, %Y - %H:%M')}}</p>
<h5 class="card-title">
{{$congress->name}}</h5>
<a href="{{route('congress.manage', ['id' => $congress->id])}}" class="btn btn-outline-primary font-size-sm">Panel</a>
</li>
@endforeach
</ul>
<!-- Pagination div static for now-->
<div class="text-center mt-3">
<div class="col">
<nav aria-label="...">
<ul class="pagination d-flex justify-content-center">
<li class="page-item disabled">
<span class="page-link">Previous</span>
</li>
<li class="page-item"><a class="page-link" href="#">1</a></li>
<li class="page-item active">
<span class="page-link">2</span>
<span class="sr-only">(current)</span>
</li>
<li class="page-item"><a class="page-link" href="#">3</a></li>
<li class="page-item">
<a class="page-link" href="#">Next</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="tab-pane fade show clearfix" id="publishedCongresses" role="tabpanel"
aria-labelledby="home-tab">
<ul class="list-group">
@foreach($congresses->filter(function ($item) { return $item->publishedCongresses(); }) as $congress)
<li class="list-group-item">
<p class="font-size-xsm"><i class="fa fa-calendar" aria-hidden="true"></i>
{{$congress->start_date->formatLocalized('%a, %b %d, %Y - %H:%M')}}</p>
<h5 class="card-title">
{{$congress->name}}</h5>
<a href="{{route('congress.manage', ['id' => $congress->id])}}" class="btn btn-outline-primary font-size-sm">Panel</a>
</li>
@endforeach
</ul>
<!-- Pagination div static for now-->
<div class="text-center mt-3">
<div class="col">
<nav aria-label="...">
<ul class="pagination d-flex justify-content-center">
<li class="page-item disabled">
<span class="page-link">Previous</span>
</li>
<li class="page-item"><a class="page-link" href="#">1</a></li>
<li class="page-item active">
<span class="page-link">2</span>
<span class="sr-only">(current)</span>
</li>
<li class="page-item"><a class="page-link" href="#">3</a></li>
<li class="page-item">
<a class="page-link" href="#">Next</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="tab-pane fade show clearfix" id="pastCongresses" role="tabpanel"
aria-labelledby="home-tab">
<ul class="list-group">
@foreach($congresses->filter(function ($item) { return $item->pastCongresses(); }) as $congress)
<li class="list-group-item">
<p class="font-size-xsm"><i class="fa fa-calendar" aria-hidden="true"></i>
{{$congress->start_date->formatLocalized('%a, %b %d, %Y - %H:%M')}}</p>
<h5 class="card-title">
{{$congress->name}}</h5>
<a href="{{route('congress.manage', ['id' => $congress->id])}}" class="btn btn-outline-primary font-size-sm">Panel</a>
</li>
@endforeach
</ul>
<!-- Pagination div static for now-->
<div class="text-center mt-3">
<div class="col">
<nav aria-label="...">
<ul class="pagination d-flex justify-content-center">
<li class="page-item disabled">
<span class="page-link">Previous</span>
</li>
<li class="page-item"><a class="page-link" href="#">1</a></li>
<li class="page-item active">
<span class="page-link">2</span>
<span class="sr-only">(current)</span>
</li>
<li class="page-item"><a class="page-link" href="#">3</a></li>
<li class="page-item">
<a class="page-link" href="#">Next</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
</div>
</div>