Laravel ile yaptığım bir projede bir view blade dosyasında birden fazla bağımsız sayfalandırma kullanmam gerekti. Burada blade dosyasında linkleri yazdırırken sadece {{ $model->links() }} kullanımında sayfa değişimlerinde tüm sayfalandırma alanları birlikte değişiyor. Çünkü tüm sayfalandırma linklerinde ?page=[sayfa_numarası] geçiyor. Bunun çözümü için paginate fonksiyonunda parametre var. Laravel API dokümantasyonunda paginate methodunda bunu görebiliriz.
Her data setinde paginate fonksiyonuna 3. parametre olarak sayfa numarası değişken ismini veriyoruz.
public function index() {
$broadcasted = Ad::whereDate('expiry_at', '>=', Carbon::now())
->paginate(10, ['*'], 'broadcasted');
$oldAds = Ad::whereDate('expiry_at', '<', Carbon::now())
->paginate(10, ['*'], 'oldAds');
return view('ad.list', compact('broadcasted', 'oldAds'));
}
Yukarıdaki şekilde sayfa linklerine tıkladığımızda istediğimiz data setinin sayfası değişecektir. Fakat sayfa değiştiği için diğer data setinde 1. sayfaya gözükecektir. Bunun çözümü için blade sayfamızda sayfalandırma linklerini aşağıdaki gibi yazmamız gerekir.
<!-- $broadcasted data seti sayfalandırma link -->
<div class="col-md-12">
{{ $broadcasted->appends(['oldAds' => $oldAds->currentPage()])->links() }}
</div>
<!-- $oldAds data seti sayfalandırma link -->
<div class="col-md-12">
{{ $oldAds->appends(['broadcasted' => $broadcasted->currentPage()])->links() }}
</div>
Özellikle sekmeli sayfalarda bu kullanım sayfalandırma işlemini kolaylaştıracaktır.