Veritabanı Sonuçlarını Sayfalandırma
Web uygulamaları geliştirirken, genellikle bir sayfada sınırlı sayıda kayıt yazdırma gereksinimiyle karşılaşırsınız.
Tüm verileri sayfalama yapmadan listelediğimizde durumdan çıkarız. Veritabanından veri seçmek için, yapıcı ve
yayınlanma tarihine göre azalan sırada sıralanmış tüm yayınlanmış makaleleri döndüren
findPublishedArticles
yöntemini içeren ArticleRepository sınıfımız var.
Presenter'da daha sonra model sınıfını enjekte edeceğiz ve render yönteminde şablona aktardığımız yayınlanmış makaleleri isteyeceğiz:
default.latte
şablonu daha sonra makaleleri listelemekle ilgilenecektir:
Bu şekilde tüm makaleleri yazabiliriz, ancak makale sayısı arttığında bu sorunlara neden olacaktır. O noktada sayfalama mekanizmasını uygulamak faydalı olacaktır.
Bu, tüm makalelerin birkaç sayfaya bölünmesini ve yalnızca geçerli bir sayfanın makalelerini göstermemizi sağlayacaktır. Toplam sayfa sayısı ve makalelerin dağılımı, toplam kaç makalemiz olduğuna ve sayfada kaç makale görüntülemek istediğimize bağlı olarak Paginator tarafından hesaplanır.
İlk adımda, repository sınıfındaki makaleleri alma yöntemini yalnızca tek sayfalık makaleleri döndürecek şekilde değiştireceğiz. Ayrıca, veritabanındaki toplam makale sayısını almak için yeni bir yöntem ekleyeceğiz, bu da bir Paginator ayarlamamız gerekecek:
Bir sonraki adım sunucuyu düzenlemektir. Şu anda görüntülenen sayfanın numarasını render yöntemine ileteceğiz. Bu numaranın URL'nin bir parçası olmaması durumunda, varsayılan değeri ilk sayfaya ayarlamamız gerekir.
Ayrıca Paginator örneğini almak, ayarlamak ve şablonda görüntülenecek doğru makaleleri seçmek için render yöntemini genişletiyoruz. HomePresenter şu şekilde görünecektir:
Şablon zaten bir sayfadaki makaleleri yineliyor, sadece sayfalama bağlantıları ekleyin:
Paginator kullanarak sayfalamayı bu şekilde ekledik. Veritabanı katmanı olarak Nette Database Core yerine Nette Database
Explorer kullanılırsa, Paginator olmadan da sayfalama uygulayabiliriz. Nette\Database\Table\Selection
sınıfı, Paginator'dan alınan sayfalama mantığı ile sayfa yöntemini içerir.
Depo şu şekilde görünecektir:
Presenter'da Paginator oluşturmak zorunda değiliz, bunun yerine repository tarafından döndürülen Selection
nesnesinin yöntemini kullanacağız:
Paginator kullanmadığımız için sayfalama linklerini gösteren bölümü düzenlememiz gerekiyor:
Bu şekilde, Paginator kullanmadan bir sayfalama mekanizması uyguladık.