Aynı kayıt sayısına sahip iki farklı sayfalama sisteminin görünümünü görüyorsunuz. İlk sayfa, daha kolay erişme sahip görünürken sayfa sayısının artması, sayfa tasarımında ciddi problemlere neden olacaktır.
İkinci sistemde ise sayfa sayısı ne olursa olsun, görünümde bir kayma olmayacak, sistemin kapladığı alan hep aynı kalacaktır.
Burada 2.sistemi nasıl yapacağımız açıklamaya çalışacağım. Ancak açıklamaya başlamadan önce standart veritabanı işlemlerini yapalım:
<%
'// Nesneler açılıyor
Set baglanti = Server.Createobject("Adodb.Connection")
Set kd = Server.Createobject("Adodb.Recordset")
'// Veritabanı bağlantısı yapılıyor
'// db.mdb kısmını kendinize göre uyarlayın
baglanti.Open "Provider=Microsoft.Jet.Oledb.4.0;Data Source="& Server.Mappath("db.mdb") &";"
'// Kayıtseti açılıyor
'// tablo kısmını kendinize göre uyarlayın
kd.open "SELECT * FROMtablo", baglanti, 1, 3
Toplam = kd.RecordCount ' Tablodaki kayıt sayısı
'// Eğer kayıt yoksa
If Toplam = 0 Then
intSayfaSayisi = 0
Response.Write "Tabloda Kayıt Yok"
'// Kayıt varsa sıralıyoruz
Else
'// Querystringden, hangi sayfada bulunduğumuzu alıyoruz
intGecerliSayfa = Request.Querystring("sayfa")
If intGecerliSayfa = "" OR IsNumeric(intGecerliSayfa) = False Then intGecerliSayfa = 1
'// Bu kısım standart sayfalama sistemi
'// Buradaki 15, bir sayfada gösterilecek kayıt sayısı
kd.PageSize =15
intSayfaSayisi= kd.PageCount
kd.AbsolutePage =intGecerliSayfa
'// Kayıtları sıralamaya başlıyoruz
For m = 1 to15
If kd.Eof Then Exit For
'// Bu kısmı da kendinize göre uyarlayın
Response.Write kd("isim") &"<br>"
kd.Movenext
Next
End If
'// Kayıtseti nesnesini kapatıyoruz
kd.Close
Set kd = Nothing
'// Veritabanı bağlantısını kapatıyoruz
baglanti.Close
Set baglanti = Nothing %>
Veritabanından veri çekme sayfamızın kodları böyle. Kırmızı ile yazılan alanlar, sayfalama sisteminde kullanacağımız değişkenler. Lacivert alanlar ise, kendi sayfanıza göre düzenlemeniz gereken alanlar.
Sayfalama sistemini daha kolay anlamak için, sistemi aşağıdaki gibi 7’e ayırabiliriz.
Bu kısımların neler olduğunu kodlarda ayrıntılı olarak göreceksiniz.
<%
Aralik = 2
intSayfaAltSiniri = intGecerliSayfa - Aralik
intSayfaUstSiniri = intGecerliSayfa + Aralik
intSolGrupSayisi = 1 + Aralik
intSagAltSinir = intSayfaSayisi - Aralik
%>
Bu kodların en üstünde 5 tane değişken görüyorsunuz.
Aralik, intSayfaAltSiniri, intSayfaUstSiniri, intSolGrupSayisi, intSagAltSinir
Bu değişkenlerin ne olduğunu şekil üzerinde açıklayalım:
(11.sayfa, şuanda bulunduğumuz sayfadır.)
Aralik değişkenini biz elle belirliyoruz. Sistemde örnek olarak 2 kullandık. Bu 2 ’nin etkilediği alanlar yukarıda, sarı ile işaretlendi. Sarı ile belirtlen alanların anlamları şöyle:
İlk Sayfa +2
Geçerli Sayfa –2
Geçerli Sayfa +2
Son Sayfa –2
Buradaki 2’ler, bizim Aralik değişkenimiz. Sanırım bu değişkenin ne işe yaradığı anlaşılmıştır.
intSayfaAltSiniri değişkeni, geçerli sayfanın bulunduğu grubun en küçük sayfasını tutuyor. Bu şekilde intSayfaAltSiniri değişkeninin değeri9.
intSayfaUstSiniri değişkeniyse, bu grubun en büyük sayfasını tutuyor. Onun değeri ise 13.
intSolGrupSayisi değişkeni, 2.kısımda kaç tane sayfanın listeleneceğini tutuyor. Þekilde, onun değeri 3.
intSagAltSinir değişkeni, 6.kısımdaki en küçük sayfa numarasını tutuyor. Onun değeri de 20.
Aralik dışında, bu değişkenlerin her biri, dinamik olarak elde ediliyor ve birbirinden etkileniyor. Bu durumda da bazı mantıksal hatalar olabiliyor.
Bu durumda bazı çelişkileri ortadan kaldırmak için sayfalamaya başlamadan önce oluşabilecek mantıksal hatalara karşı bazı düzenlemeler yapmalıyız.
intSayfaUstSiniri değişkeninin intSayfaSayisi değişkeninden büyük olması durumu: intSayfaUstSiniri, mantıksal olarak intSayfaSayisi değişkeninden büyük olamaz, çünkü link verebileceğimiz son sayfanın numarası, bizim sayfa sayımıza eşittir. Bunun ötesine geçemeyiz. Þimdi bu durumun önüne geçmek için gerekli düzenlemeyi yapalım.
Önce intSayfaAltSiniri değişkenini, geçerli sayfanın 2 gerisinde olacak şekilde ayarlayacağız. Sonra da intSayfaUstSiniri değişkenini intSayfaSayisi değişkenine eşitleyeceğiz.
<%
If (intSayfaUstSiniri >intSayfaSayisi) Then
intSayfaAltSiniri = intSayfaSayisi - (2 * Aralik)
intSayfaUstSiniri = intSayfaSayisi
End If
%>
intSayfaAltSiniri değişkeninin 1’den küçük olması durumu: intSayfaAltSiniri değişkeni en az 1 olabilir çünkü olabilecek en küçük sayfa 1’dir. Daha aşağı inemeyiz. Burada, intSayfaAltSiniri değişkenini 1’e eşitleyeceğiz. Sonra intSayfaUstSiniri değişkenini intSayfaAltSiniri değişkenine bağlı olarak değiştireceğiz. Sonra da intSayfaUstSiniri değişkenin intSayfaSayisi değişkeninden büyük olmasının önüne geçeceğiz.
<%
If (intSayfaAltSiniri <= 0) Then
intSayfaAltSiniri = 1
intSayfaUstSiniri = intSayfaAltSiniri + (2 * Aralik)
If intSayfaUstSiniri >= intSayfaSayisi Then intSayfaUstSiniri = intSayfaSayisi
End If
%>
Son olarak 2. ve 6.kısımlardaki link sayısıyla ilgili işlemlerimiz kaldı. Onları da bir işlem olarak inceleyelim:
intSolGrupSayisi değişkeni, yani 2.kısımda gösterilecek bağlantı sayısı, intSayfaAltSiniri değişkeninden küçük olmalıdır. Yine intSagAltSinir değişkeni, intSayfaUstSiniri değişkeninden büyük olmalıdır. Bunu sağlamak için yapmamız gereken işlemlerse öyle:
<%
If intSolGrupSayisi >= intSayfaAltSiniri Then intSolGrupSayisi = intSayfaAltSiniri - 1
If intSagAltSinir <= intSayfaUstSiniri Then intSagAltSinir = intSayfaUstSiniri + 1
%>
Mantıksal düzenlemeleri yaptıktan sonra 7’e ayırdığımız sistemin bölümlerini artık yavaş yavaş açıklayabiliriz:
1.Kısım: Eğer geçerli sayfa ilk sayfa değilse, ilk sayfa ve bir önceki sayfaya verilen bağlantılar. Eğer geçerli sayfa, ilk sayfa olunca zaten ilk sayfaya bağlantı vermemize gerek kalmıyor. Ve ilk sayfada olduğumuzda, bir önceki sayfa diye bir durum olamayacağından 1.Kısım, sadece ilk sayfada olmadığımız zaman görüntüleniyor.
<%
If intGecerliSayfa >1 Then %>
<a href="?sayfa=1" title="İlk Sayfa">[««]</a>
<a href="?sayfa=<%=intGecerliSayfa-1%>" title="Önceki Sayfa">[«]</a><%
End If
%>
2.Kısım: İlk sayfadan intSolGrupSayisi değişkenine kadar sayfa numaraları gösteriliyor.
<%
For i = 1 to intSolGrupSayisi
If CInt(i) = (intGecerliSayfa) Then
Response.Write " <b>"
Else %>
<a href="?sayfa=<%=i%>" title="<%=i%>. Sayfa"><%
End If
Response.Write i &".</a></b>"
Next
%>
3.Kısım: Eğer İlk Sayfa + Aralik ile Geçerli Sayfa – Aralik arasındaki fark 1’den büyükse, arada görüntülenemeyen sayfalar için noktalar koyuyoruz.
<%
If (intSayfaAltSiniri - intSolGrupSayisi >1 ) Then Response.Write "<b>. . .</b>"
%>
4.Kısım: Geçerli sayfadan Aralikdeğişkeni kadar önceki sayfalar, geçerli sayfa ve geçerli sayfadan Aralik değişkeni kadar sonraki sayfanın bulunduğu gruptur. Bu değerleri intSayfaAltSiniri ve intSayfaUstSiniri değişkenleriyle tutulduğu için şöyle bir döngü kurulur.
<%
For i = intSayfaAltSiniri to intSayfaUstSiniri
If CInt(i) = CInt(intGecerliSayfa) Then
Response.Write " <b>"
Else %>
<a href="?sayfa=<%=i%>" title="<%=i%>. Sayfa"><%
End If
Response.Write i &".</a></b>"
Next
%>
5.Kısım: Eğer intSagAltSinir ile intSayfaUstSiniri arasındaki fark 1’den büyükse, arada görüntülenemeyen sayfalar için noktalar koyuyoruz.
<%
If (intSagAltSinir - intSayfaUstSiniri >1) Then Response.Write "<b>. . .</b>"
%>
6.Kısım: intSagAltSinir değişkeninden intSayfaSayisi değişkenine kadar sayfa numaraları gösteriliyor.
<%
For i = intSagAltSinir to intSayfaSayisi
If CInt(i) = CInt(intGecerliSayfa) Then
Response.Write " <b>"
Else %>
<a href="?sayfa=<%=i%>" title="<%=i%>. Sayfa"><%
End If
Response.Write i &".</a></b>"
Next
%>
7.Kısım: Eğer geçerli sayfa son sayfa değilse, son sayfa ve bir sonraki sayfaya verilen bağlantılar. Eğer geçerli sayfa, son sayfa olunca zaten son sayfaya bağlantı vermemize gerek kalmıyor. Ve son sayfada olduğumuzda, bir sonraki sayfa diye bir durum olamayacağından 7.Kısım, sadece son sayfada olmadığımız zaman görüntüleniyor.
<%
If CInt(intGecerliSayfa) <>CInt(intSayfaSayisi) Then %>
<a href="?sayfa=<%=intGecerliSayfa+1%>" title="Sonraki Sayfa">[»]</a>
<a href="?sayfa=<%=intSayfaSayisi%>" title="Son Sayfa">[»»]</a><%
End If
%>