Giriş
Diğer frameworklerde sayfalama uğraştırıcı olabilir. Laravel’de ise çok basittir. Laravel sayfalama bağlantılarını kolayca üretebilir. HTML çıktısı Bootstrap CSS framework. uyumludur.
Temel Kullanım
Query Builder Sonuçlarınını Sayfalama
Kayıtları sayfalamasnın birkaç yolu vardır. En kolayı Query Builder veya Eloquent Query sorgulama yöntemlerinde paginate metodudur.
İlk olarak bir sorgudaki paginate metodunun çağırılmasına göz atalım. Bu örnekte paginate metoduna geçirilen argüman göstermek istediğiniz kayıt sayısıdır. Bu durumda her sayfada 15 kayıt göstermek istiyoruz:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
namespace App\Http\Controllers; use DB; use App\Http\Controllers\Controller; class UserController extends Controller { /** * Show all of the users for the application. * * @return Response */ public function index() { $users = DB::table('users')->paginate(15); return view('user.index', ['users' => $users]); } } |
Not: Şimdilik sayfalama ilemleri
groupBydurumu sağlıklı çalışmıyor. Eğer groupBy kullanmaya ithiyacınız varsa sayfalamayı elle oluşturun.
Kolay Sayfalama
Eğer sayfalamada yalnızca “Next” ve “Previous” bağlantılarını gösterecekseniz simplePaginate metodunu kullanın.
|
1 |
$users = DB::table('users')->simplePaginate(15); |
Eloquent Sonuçlarını Sayfalama
Eloquent sorguarını da sayfayayabilirsiniz. Bu örnekte User modelini her sayfada 15 olacak şekilde sayfalayalım. Gördüğünüz gibi “query builder” ile neredeyse aynı.
|
1 |
$users = App\User::paginate(15); |
Tabi ki, where gibi kısıtlayıcılarınızdan sonra da paginate metodunu çağırabilirsiniz.
|
1 |
$users = User::where('votes', '>', 100)->paginate(15); |
Eloquent modellerinizi sayfalarken simplePaginate metodunu da kullanabilirsiniz.
|
1 |
$users = User::where('votes', '>', 100)->simplePaginate(15); |
Elle Sayfalama Oluşturma
Bazen kayıtları gerçirerek sayfalamayı elle oluşturmak isterseniz. İhtiyacınıza göre Illuminate\Pagination\Paginator veya Illuminate\Pagination\LengthAwarePaginator kullanabilirsiniz.
Paginator sınıfının sonuç kümesinde kaç kayıt olduğunu bilmesine gerek yoktur. LengthAwarePaginator ise toplam sayıya ihtiyaç duyar.
Başka bir deyişle Paginator, simplePaginate metoduna; LengthAwarePaginator ise paginate metoduna karşılık gelir.
Sonuçları Görünümde Gösterme
wuery Builder veya Eoquent Queery’de simplePaginate veya paginate metodu çağırıldığında bir sayfalama kopyası alırsınız. paginate metodunu çağırdığınızda Illuminate\Pagination\LengthAwarePaginator örneğini alırınız. simplePaginate metodunu çağırdığınızda ise Illuminate\Pagination\Paginator örneğini alırsınız. Bu objeler sonuç kümesini tanımlamak için birkaç method sağlarlar. Bu yardımcı mertodlara ek olarak, sayfalama örneği döngüye sokulabilir.
|
1 2 3 4 5 6 7 |
<div class="container"> @foreach ($users as $user) {{ $user->name }} @endforeach </div> {!! $users->render() !!} |
render metodu bağlantıları oluşturacak. Her bir link uygun ?page değişkenini içerecek. Üretilen HTML çıktının Bootstrap CSS framework uyumlu olduğunu hatırlayınız.
Bağlantı Adresini Özelleştirme
setPath metodu bağlantılar oluşturulurken sayfalama tarafından kullanılan bağlantı adresini özelleştirmenizi saplar. Örneğin, http://example.com/custom/url?page=N gibi bir adres elde etmek istiyorsanız, setPath metoduna custom/url geçirmelisiniz.
|
1 2 3 4 5 6 7 |
Route::get('users', function () { $users = App\User::paginate(15); $users->setPath('custom/url'); // }); |
Sayfalama Bağlantılarına Ekleme Yapmak
append metodunu kullarak sayfalama linklerine ekstra değişkenler ekleyebilirsiniz. Örneğin herbir sayfalama adresine &sort=votes eklemek için:
|
1 |
{!! $users->appends(['sort' => 'votes'])->render() !!} |
Hash (#) eklemek için fragment metodunu kullanabilirsiniz.
|
1 |
{!! $users->fragment('foo')->render() !!} |
Daha Fazla Yardımcı Metod
Ek sayfalama bilgilerine ulaşmak için aşağıdaki metodlarını kullanabilirsiniz.
|
1 2 3 4 5 6 7 8 |
$results->count() $results->currentPage() $results->hasMorePages() $results->lastPage() (Not available when using simplePaginate) $results->nextPageUrl() $results->perPage() $results->total() (Not available when using simplePaginate) $results->url($page) |
Sonuçları JSON’a Çevirme
toJson metodunu kullanarak json’a dönüştürebilirsiniz.
Örnek JSON Sayfalama
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
{ "total": 50, "per_page": 15, "current_page": 1, "last_page": 4, "next_page_url": "http://laravel.app?page=2", "prev_page_url": null, "from": 1, "to": 15, "data":[ { // Result Object }, { // Result Object } ] } |