Muradiye Forum
Would you like to react to this message? Create an account in a few clicks or log in to continue.

Aşağa gitmek
BaRaN
BaRaN

Gelişmiş Sayfalama Sistemi 1210
Erkek Yay
Yılan
Mesaj Sayısı : 873
Doğum tarihi : 02/12/89
Yaş : 34
Nerden : güneşin doğduğu yer(DOĞUBEYAZIT)
İş/Hobi : cep telefonu
Bilgi : <center><font color="blue"><marquee direction="left" style="background:white">Muradiye Forum Bilgi Paylaşım Platformu</marquee></font></center
Rep Gücü : 0
Rep Puan : 8
Kayıt tarihi : 20/12/08
http://muradiyeforum.net

Gelişmiş Sayfalama Sistemi Empty Gelişmiş Sayfalama Sistemi

C.tesi Ocak 31, 2009 12:35 pm
Gelişmiş Sayfalama Sistemi Sayfalama_1

Gelişmiş Sayfalama Sistemi Sayfalama_2

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") &"
"

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.

Gelişmiş Sayfalama Sistemi Sayfalama_3

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.)

Gelişmiş Sayfalama Sistemi Sayfalama_4

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 %>
[««]
[«]<%
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 " "
Else %>
<%
End If
Response.Write i &".
"
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 ". . ."
%>

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 " "
Else %>
<%
End If
Response.Write i &".
"
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 ". . ."
%>

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 " "
Else %>
<%
End If
Response.Write i &".
"
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 %>
[»]
[»»]<%
End If
%>
Sayfa başına dön
Bu forumun müsaadesi var:
Bu forumdaki mesajlara cevap veremezsiniz