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
groupBy
durumu 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 } ] } |