MyDesign | Kod Arşivi - Anasayfaya Dön   No banner in farm
Anasayfa Araştır Forum Gelişmiş Arama Siteniz İçin En Hit İçerikler RSS İçerik Ekle Scriptler Destekleyenler Kadromuz Reklam İletişim Giriş Sayfası Yap  Sık Kullanılanlara Ekle
Bu Kategorinin En Yeni Makaleleri:


Bu Kategorinin En Çok Okunan Makaleleri:






Arama:
Gelişmiş Arama


No banner in farm



En Çok Görüntülenen Kodlar:


Üye Girişi:
 Üye Ol



Anasayfa > Asp > Makaleler

Gelişmiş Sayfalama Sistemi

Veritabanından veya başka bir kaynaktan gelen verileri sayfa düzenini bozmadan, klasik sayfalama sisteminden farklı olarak, daha gelişmiş yöntemlerle sayfalayarak yayınlamayı ayrıntılı olarak inceliyoruz.

Sayfalama  Veritabany  Page  Paging  Database 

Kategori: Asp
Gönderen: mYavuz
Tarih: 17 Ekim 2006
Okunma Sayısı: 34648
Puan: 8,9 / 39 Oy
Puan Ver:
Google Bookmarks  del.icio.us  Digg  Yahoo! MyWeb  Windows Live  Furl




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
%>

Gelişmiş Sayfalama Sistemi için yazılan yorumlar

Ahmet Çelik  { 17 Kasım 2015 }
100 kayıttan fazla olunca ilk sayfayı 0.sayfa olarak gösteriyor. Nereden düzeltilir?

Fatih emir  { 26 Ocak 2015 }
Bu kodda şöyle bir hata var misal veritabanımızda sorguda 101 kayıt var ve biz sayfada 10 veri gözüksün diğerleri 2-3-4 diye devam etsin dediğimizde 101 kayıt olduğu için bize 10 sayfa gösteriyor 1 kayıt için 11nci sayfayı göstermiyo ve aradaki 10 kayıdı hiç ediyor düzeltirseniz sevinirim bu çoğunun dikkatini çekmemiş olabilir ama çok önemli bi sorun

Fırat  { 05 Ağustos 2013 }
Çok yararlı bir paylaşım elinize emeğinize sağlık.

Halil İbrahim ÖZKILINÇ  { 07 Eylül 2012 }
Açıklama Gerçekten Çok Güzel. Teşekkür Ederim..

Şevket KAYAALP  { 23 Ocak 2012 }
Harika bir açıklama. Allah sizden razı olsun. Sizin gibi değerli arkadaşların sayısı artar inşallah.

burak  { 17 Mayıs 2011 }
kd.pageubsolute=intgecerlisayfa veritbanina hangı sayfada oldugumuzu bıldırıyor

burak  { 02 Mayıs 2011 }
kd.AbsolutePage =intGecerliSayfa absolutePage kodu ne işe yarıyor.lütfen yardım

Hüseyin BOZKURT  { 22 Nisan 2011 }
Murat Hocam, Ellerinize sağlık mükemmel bir uygulama olmuş.Acces Vt'de de MySQL Vt'de de çalışıyor..

hakan  { 13 Şubat 2011 }
bu mysqlde çalisiyor mu?

Oğuzhan  { 20 Ekim 2010 }
şu şekilde hata alıyorum sebebi ne olaiblir.. ADODB.Recordset hata '800a0cb3' Geçerli Kay&#253;t Dizisi yer i&#254;aretlerini desteklemiyor. Bu, sa&#240;lay&#253;c&#253;n&#253;n veya seçili kay&#253;t kümesi türünün bir s&#253;n&#253;rlamas&#253; olabilir. /panel.asp, satır 716 satır 716: gelenmesajlar.AbsolutePage =intGecerliSayfa

UfukArt  { 17 Ekim 2010 }
hazırlayan arkadaşa yürekten teşekkürler... Çok başarılı bir uygulama... Tüm projelerimde kullanıyorum.

Fatih  { 26 Ağustos 2010 }
Gerçekten çok iyi anlatım, işimi gördü. Teşekkürler...

kelebeknehir  { 30 Temmuz 2010 }
ellerine sağlık uzun zamandır bu kodu arıyordum. Harika....

Acemi kullanici   { 10 Mart 2010 }
Anlatımınız için teşekkürler Erdoğan bey ben de for m kısmnda hata aldım. siz çözümünü yazsanız zor mu olur.? teşekkürler

UfukArt   { 02 Ocak 2010 }
Uyguladım. Sorunsuz çalışıyor. Teşekkürler mydesign.

mustafa   { 15 Aralık 2009 }
hocam öncelikle verdiğiniz bilgiler için teşekkürler. sizden bir konu hakında yardım almak istiyorum tabiki uygun görürseniz. ben asp de acem sayılırım basit bir haber duyuru modulu yapmaya çalışıyorum şu ana kadar her şey gayet başarılı fakat benim istediğim bir şey var mesela default.asp ye girdik sayfada bir haber ve haberle alakalı resim çıkıyor alt kısımdada sayfa sayısına kadar 1.2.3.4 gibi bir sonra ki habere geçiş sistemi mevcut ben se elle tıklamadan belli bir süre aralığında otomatik geçmesini istiyorum her sayfada bu işlem olmalı sayfalar bitince tekrardan aynı işlem başlamalı yardım ederseniz gerçekten çok sevinirim teşekkürler kolay gelsin

ben   { 28 Haziran 2009 }
çok güzel ..

oktay mert   { 22 Mayıs 2009 }
Hocam makaleniz çok güzel olmus ellerinize sağlık yalnız for dongusunde bazen hata veriyor bende for içersine aşağıdaki kodu yazarak kurtuldum aynı hataları alan arkadaşlar bunu ekleyebılır if Rs.Eof then exit for end if

Serbülent Aslan   { 07 Mayıs 2009 }
Üstad harika bir anlatım harika bir format çok teşekkürler... Ben bu yazmış olduğunuz çalışmaya ilaveten bişey eklemeye çalıştım fakat bir türlü beceremedim. İstediğim ki sayfa başına gösterilecek kayıtların adedini kullanıcı seçsin. Bunun için bir listbox koydum içine de 5,10,20,30,50,100 gibi değerler yazdım. fakat ne yaptıysam ne ettiysem "Sıfıra bölünme" hatasından kurtulamadım. Bu konuda yardımcı olabilirseniz sevinirim. İyi çalışmalar...

Özgür ERKAYA  { 21 Mart 2009 }
hocam ilk başta makaleniz için teşekkür ederim. bir soru kafama takıldı ben şuanda mssql ile asp tabanlı bir web scripti yazıyorum burdaki anlatmakta olduguğunuz sayfalama mantıgını kullansam nasıl olur ? biliyorsunuz ki bağzı komutlar özelliklede sayfalamada sql olarak mssql de çalışmıyor accessde çalışan hocam acil cevaplarınızı bekliyorum teşekkürler

Mürsel Dedeoğlu   { 07 Mart 2009 }
çok tşk ler...ellerinize emeğinize sağlık.....

Mürsel Dedeoğlu   { 20 Şubat 2009 }
emeği geçenlere çok çok teşekkürler.....

Abdurrahman   { 04 Ağustos 2008 }
Hocam, linkler xhtml uymuyor. Çünkü; Her linkin sonunda "</b>" atıyor. Bunu düzeltirseniz çok sevinirim.

dmb   { 11 Mayıs 2008 }
bu sayfalama sisteminin otomatik olarak belirli bir süre içerisinde refresh edip örneğin ilk sayfa da 1-17 arası sonuçları gösterdi, 40sn. sonra 18-35 ve 40sn. sonra 35 - 42 diye devam edip seri bir şekilde ilerleme sistemi olabilirmi acaba ?

bindvori berre   { 07 Şubat 2008 }
mükemmel bir anlatım tebrikler teşekkürler

veysel baba   { 26 Kasım 2007 }
Erdoğan hocam keşke sen yazsaydın geriye doğru linklerin nasıl olacağını :(

Erdoğan Aktaş   { 09 Mart 2007 }
Çok güzel bir anlatım olmuş elinize yüreğinize sağlık çok işimi gördü. Yanlız sayfalama da küçük bi kaç eksik ve hata var onlarda gözden geçirilip düzeltilirse daha faydalı olabilir. For m = 1 to15 burda to dan sonra boşluk sayfalamalarda önceki sayfaların linkleri yok. Ben düzelttim ama herkes bunu beceremeyebilir.

Yorum ekleyin

Bu sayfaya link verin:
Anasayfa > Asp > Makaleler > Gelişmiş Sayfalama Sistemi
Kategoriler:


Forum:



Bağlantılar:


Murat Yavuz | Site Haritası | Gizlilik Bildirimi | 54.197.177.123 | 0,11 Saniye
© Copyright 2004-2017 MyDesign | Kod Arşivi. Tüm Hakları Saklıdır.
MyDesign | Kod Arşivi, en iyi görünüm için, 1024x768 ve üzeri çözünürlük tavsiye eder.