Odak modu
Pagination (Sayfalama)
Uygulamamızın yavaş yavaş sonuna geliyoruz. Ama bir sorunumuz var, uygulamamıza yüklediğimiz tüm fotoğraflar anasayfada sıralanıyor. Fotoğraf sayımız arttığında sayfamızın aşağıya doğru uzadığını göreceğiz. Bunun önüne geçmek için farklı çözümler var biz bu çalışmamızda Pagination kavramı üzerine konuşacağız. Sayfalama özelliğine geçmeden önce req.query özelliği üzerine konuşmamız gerekir.
req.query özelliği ile ilgili yönlendirmede bulunan sorgu parametrelerini yakalamamızı sağlar. URL de ?user=test&pass=1234
sorgusu yapıldığında req.query özelliği bize sorgu parametlerini ve değerlerini gösteren bir key - value objesi döner.
{ user: 'test', pass: '1234' }
Bu özellik sayesinde biz ne yapabiliriz? Eğer hangi sayfada olduğumuzu bir şekilde query ile yakaladığımızda biz sayfa içeriğimizi de o anda bulunan sayfaya göre belirleyebiliriz. Her sayfada bulunan içerik sayısını da belirledikten sonra her sayfaya hangi içeriğin düşeceğini belirleyebiliriz. Bu arada toplam fotoğraf sayımızı her sayfada bulunmasını istediğimiz fotoğraf sayısına bölersek toplam sayfa sayımız da ortaya çıkar. Nasıl karışık geldi değil mi?:)))
Şimdi hemen ilgili kodumuzu yazalım ve ve yanlarına açıklamalarımızı koyalım.
const page = req.query.page || 1; // Başlangıç sayfamız veya ilk sayfamız.
const photosPerPage = 3; // Her sayfada bulunan fotoğraf sayısı
const totalPhotos = await Photo.find().countDocuments(); // Toplam fotoğraf sayısı
const photos = await Photo.find({}) // Fotoğrafları alıyoruz
.sort('-dateCreated') // Fotoğrafları sıralıyoruz
.skip((page-1) * photosPerPage) // Her sayfanın kendi fotoğrafları
.limit(photosPerPage) // Her sayfada olmasını istediğimi F. sayısını sınırlıyoruz.
index.js sayfasındaki pagination kodu ise aşağıdadır.
<div>
<% if (pages > 0) { %>
<ul class="nav tm-paging-links">
<% for (i=1; i <=pages; i++) { %>
<% if (i == current) { %>
<li class="nav-item active"><a href="/?page=<%= i %>" class="nav-link tm-paging-link"><%= i %></a></li>
<% } else if (i < pages) { %>
<li class="nav-item"><a href="/?page=<%= i %>" class="nav-link tm-paging-link"><%= i %></a></li>
<% } else { %>
<li class="nav-item"><a href="/?page=<%= i %>" class="nav-link tm-paging-link">></a></li>
<% } %>
<% } %>
</ul>
<% } %>
</div>
Sektörde en çok aranan yazılım becerilerini kazan
Yapay zeka desteği, birebir mentörlük saatleri, canlı dersler ve senin için özel hazırlanmış içeriklerle eksiklerini tamamla, düzenli geri bildirimler al ve öğrenme sürecini en verimli hale getir.
Yunus Emre Kabakcı
Patika+ mezunuPatika+ Fullstack Web Development Bootcamp mezunumuz Yunus Emre,
3 ay içinde Katar’dan aldığı teklif ile, global bir şirket olan Pavo Group’da işe başladı!
“İçerik zenginliği, mentor desteği, ileriye dönük bir network sağlaması ve dünyada en çok tercih edilen frameworkler üzerinden bir eğitim veriyor olması Patika+’ı tercih etmemin temel sebepleri oldu!“
Yorum yapabilmek için derse kayıt olmalısın!