• 17-11-2007, 13:13:08
    #1
    ASP İLE SAYFALAMA VE SIRALAMA
    Asp ile sayfalamayı asp ile uğraşanların bir kısmı bilir.Ben ise bu yazımda sıralama ile birlikte 2 şeyden daha bahsedeceğim
    1-Özellikle alışveriş sitelerinde gördüğünüz fiyata göre sırala,adete göre sırala...vs.
    2-Kayıtlarınızı sıraladınız ve 5. sayfadasınız bir işlem yaptınız ve işlemden sonra ilk sayfaya döndü tekrar.Bu problemi Oyunsiteleri.org da admin panelinde yaşadığımdan sizlerlede paylaşmak istedim.Burada işlemden sonra kaldığımız sayfaya dönmeyi de anlatacağım.
    Şimdi planladığım şey şu...Bir veritabanı oluşturacağım ve içinde linkler olacak.Bu linklerin hitleri ve onay durumları olacak.Bende bu linkleri sayfalara böleceğim ve onayla/onay kaldır ve sil gibi işlemler yapacağım.Ayrıca hite göre sıralama,onay duruma göre sıralama,site adına göre sıralama yapacağım.
    Öncelikle veritabanımı şu şekilde tasarlıyorum.Veri tabanımın ve tablomun adı "siteler".
    Sanırım 10 tane kayıt yeterli ben zaten kayıtları deneme amaçlı olduğu için 3'erli sayfalara böleceğim böylelikle toplam 4 sayfa olacak.
    Artık asp kodlarımıza geçelim...
    Kodları bir defada mı yazayım yoksa aşamalı olarak vereyim gibi bir kararsızlık yaşadım ve genelde kendim bir şeyleri denerken yaptığım basitten karmaşığa yöntemini uygulayacağım ve her defasında kodların tamamını tekrar yazacağım.
    Bu aşamada veritabanımızdan aldığımız verileri bir tabloya yazdıralım sadece.
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1254">
    <title>ASP ile sıralama ve sayfalama</title>
    </head>
    <body>
    <table style="border:1px solid #c0c0c0;border-collapse:collapse;font-family:Tahoma;font-size:10pt;background-color:#f9f9f9" cellpadding="2" rules="all">
    <tr><th>Site</th><th>Hit</th><th>Onay Durumu</th><th>Sil</th></tr>
    <%
    Dim adoCon
    Set adoCon=Server.CreateObject("ADODB.Connection")
    adoCon.open "Provider=Microsoft.JET.OLEDB.4.0; Data Source="&Server.MapPath("siteler.mdb")
    Set rs=Server.createobject("ADODB.Recordset")
    rs.open "select * from siteler",adoCon,1,3
    do while not rs.eof
    %>
    <tr>
    <td><a href="<%=rs("URL")%>"><%=rs("SiteAdi")%></a></td>
    <td><%=rs("hit")%></td>
    <td><%=rs("Onay")%></td>
    <td>Sil</td>
    </tr>
    <%
    rs.movenext
    loop
    %>
    </table>
    <%
    rs.close
    adoCon.close
    %>
    </body>
    </html>
    İşte şöyle bir görüntü elde ederiz
    Şimdi bunları 3'erli sayfalara böleceğim.Sayfa numarasını url'den Request.QueryString("") ile alacağım.
    Ve recordset'in bi kaç komutundan kısaca bahsedeyim sonra sayfalama kodunu vereceğim.
    Rs.PageSize=3 'Böyle bir kullanım rs'nin bir sayfadaki kayıt sayısını belirtir.
    Rs.AbsolutePage=2 'Tamam 3'erli sayfalara böldük peki kaçıncı sayfadayız.Bunuda bu komut belirler burada 2. sayfa
    rs.PageCount 'Hani 3'erli sayfalara böldük ya peki kaç sayfa oldu bunuda rs.PageCount ile hesaplayacağız.
    Neyse koda geçelim....
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1254">
    <title>ASP ile sıralama ve sayfalama</title>
    </head>
    <body>
    <table style="border:1px solid #c0c0c0;border-collapse:collapse;font-family:Tahoma;font-size:10pt;background-color:#f9f9f9" cellpadding="2" rules="all">
    <tr><th>Site</th><th>Hit</th><th>Onay Durumu</th><th>Sil</th></tr>
    <%
    Dim adoCon
    Set adoCon=Server.CreateObject("ADODB.Connection")
    adoCon.open "Provider=Microsoft.JET.OLEDB.4.0; Data Source="&Server.MapPath("siteler.mdb")
    Set rs=Server.createobject("ADODB.Recordset")
    rs.open "select * from siteler",adoCon,1,3
    rs.Pagesize=3
    sayfa=Request.QueryString("sayfa")
    if sayfa="" then sayfa=1
    rs.AbsolutePage=sayfa
    j=0
    do while not rs.eof and j<rs.Pagesize
    %>
    <tr>
    <td><a href="<%=rs("URL")%>"><%=rs("SiteAdi")%></a></td>
    <td><%=rs("hit")%></td>
    <td><%=rs("Onay")%></td>
    <td>Sil</td>
    </tr>
    <%
    j=j+1
    rs.movenext
    loop
    %>
    </table>
    <%
    rs.close
    adoCon.close
    %>
    </body>
    </html>
    Başardık işte sayfamızda sadece istediğimiz sayıda kayıt gösteriliyor.Peki diğer sayfalara nasıl geçeceğiz şimdi onu yazalım.
    Ama kısaca ne yaptım bahsedeyim. rs.Pagesize ile sayfadaki kayıt sayısını belirledim ve rs.absolutepage ile aktif sayfayı belirttim. j adında bir değişkenle de döngünün sadece rs.pagesize kadar dönmesini sağladım.
    Hadi sayfalamaya geçelim
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1254">
    <title>ASP ile sıralama ve sayfalama</title>
    </head>
    <body>
    <table style="border:1px solid #c0c0c0;border-collapse:collapse;font-family:Tahoma;font-size:10pt;background-color:#f9f9f9" cellpadding="2" rules="all">
    <tr><th>Site</th><th>Hit</th><th>Onay Durumu</th><th>Sil</th></tr>
    <%
    Dim adoCon
    Set adoCon=Server.CreateObject("ADODB.Connection")
    adoCon.open "Provider=Microsoft.JET.OLEDB.4.0; Data Source="&Server.MapPath("siteler.mdb")
    Set rs=Server.createobject("ADODB.Recordset")
    rs.open "select * from siteler",adoCon,1,3
    rs.Pagesize=3
    sayfa=Request.QueryString("sayfa")
    if sayfa="" then sayfa=1
    rs.AbsolutePage=sayfa
    j=0
    do while not rs.eof and j<rs.Pagesize
    %>
    <tr>
    <td><a href="<%=rs("URL")%>"><%=rs("SiteAdi")%></a></td>
    <td><%=rs("hit")%></td>
    <td><%=rs("Onay")%></td>
    <td>Sil</td>
    </tr>
    <%
    j=j+1
    rs.movenext
    loop
    %>
    <tr><td colspan="4">
    <%
    for i=1 to rs.Pagecount
    if i=cInt(sayfa) then
    Response.write "["&i&"] |"
    else
    Response.Write "<a href=?sayfa="&i&">"&i&"</a> |"
    end if
    next
    %>
    </td>
    </tr>
    </table>
    <%
    rs.close
    adoCon.close
    %>
    </body>
    </html>
    Şimdi sayfalar arası geçişte çalışıyor....Artık sıralama kısmına geçebiliriz.Burada 3. sayfada 1 kaydı sileceğim ve silme işleminden sonra tekrar 3. sayfaya dönmesini sağlayacağım.
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1254">
    <title>ASP ile sıralama ve sayfalama</title>
    </head>
    <body>
    <table style="border:1px solid #c0c0c0;border-collapse:collapse;font-family:Tahoma;font-size:10pt;background-color:#f9f9f9" cellpadding="2" rules="all">
    <tr>
    <th><a href="?sirala=SiteAdi">Site</a></th>
    <th><a href="?sirala=hit">Hit</a></th>
    <th><a href="?sirala=onay">Onay Durumu</a></th>
    <th>Sil</th></tr>
    <%
    sirala="onay"
    if Request.QueryString("sirala")<>"" then sirala=Request.QueryString("sirala")
    Dim adoCon
    Set adoCon=Server.CreateObject("ADODB.Connection")
    adoCon.open "Provider=Microsoft.JET.OLEDB.4.0; Data Source="&Server.MapPath("siteler.mdb")
    if Request.QueryString("sil")<>"" then
    adoCon.execute("delete from siteler where SiteID="&Request.QueryString("sil"))
    end if
    Set rs=Server.createobject("ADODB.Recordset")
    rs.open "select * from siteler order by "&sirala&" desc",adoCon,1,3
    rs.Pagesize=3
    sayfa=Request.QueryString("sayfa")
    if sayfa="" then sayfa=1
    rs.AbsolutePage=sayfa
    j=0
    do while not rs.eof and j<rs.Pagesize
    %>
    <tr>
    <td><a href="<%=rs("URL")%>"><%=rs("SiteAdi")%></a></td>
    <td><%=rs("hit")%></td>
    <td><%=rs("Onay")%></td>
    <td><a href="?sil=<%=rs("SiteID")%>&sirala=<%=sirala%>&sayfa=<%=sayfa%>">Sil</a></td>
    </tr>
    <%
    j=j+1
    rs.movenext
    loop
    %>
    <tr><td colspan="4">
    <%
    for i=1 to rs.Pagecount
    if i=cInt(sayfa) then
    Response.write "["&i&"] |"
    else
    Response.Write "<a href=?sirala="&sirala&"&sayfa="&i&">"&i&"</a> |"
    end if
    next
    %>
    </td>
    </tr>
    </table>
    <%
    rs.close
    adoCon.close
    %>
    </body>
    </html>
    İşte final kodu böyle oldu
    Hit linkine tıkladığımda siteleri hite göre sıraladı.
    Hitlere göre sıralı iken 3. sayfaya geçtim...
    Ajdar isimli site için sil linkine tıkladım ve silmeden sonra tekrar 3. sayfadan devam etti...
    Yılmaz YIKILMAZ - 2007
    Burada biter.... Görüşleriniz ve sorularınız için ediznet@mynet.com adresinden bana mail atabilirsiniz.
    Anlattıklarımın kaynak asp dosyası,veritabanı ve resimleri zipli halde almak için şu adresten indirininiz.
    RapidShare: 1-Click Webhosting
    Not:Klasöre yazma izni vermeyi unutmayınız...Silme işlemi için gerekecektir...
  • 18-11-2007, 00:09:47
    #2
    +Rep verdim, insanlara yardımcı olduğunuz için teşekkürler.

    Bir husus eklemek istiyorum, sadece view yapılacak bir sql cümlesini 1,3 ile açmamak daha uygun olacaktır.
  • 18-11-2007, 10:53:31
    #3
    Tşk ederim
    o anahtarlar 1,3 gibi zaten bi türlü tam anlamadım
    ama alfa yayınlarının bi kitabında diyordu işte okurken şunu kullanın yazarken şunu kullanın güncellerken şunu kullanın falan
    büyük projeler için dikkat edilmesi gerekiyor tabi
  • 06-08-2008, 11:06:56
    #4
    anlatım güzel emege saygı çok teşekkürler
  • 23-08-2008, 12:47:24
    #5
    çok süper anlatım olmuş helal
  • 29-12-2008, 12:06:20
    #6
    bu sekilde online uyeleri nasıl sırayalabiliriz?
    mesela: ilk 20 uye 1.sayfada diğer 20 - 2. sayfada devam edcek
    1234 ileri seklinde..
  • 07-01-2009, 12:58:56
    #7
    verdiğiniz bilgilerle ve kendimce bişiler katarak şöyle bi kod olusturdum umarım sizede yardımcı olurum
    <center>	
    <font face="verdana" size="1">Sayfa : </font><b>
    <font face="verdana" size="2">
    <% 
    if radet/deste = int(radet/deste) then sayfaadet = radet/deste else sayfaadet = int(radet/deste) +1 
    for p=0 to sayfaadet-1 
    if sayfa = p then 
    %> <%=p+1%> 
    <% 
    else %><A href="default.asp?s=<%=p%>"> - <%=p+1%></A></b> 
    <% 
    end if 
    next
    %>
    </font> 		
    		</center>
    		<%
    sql="SELECT COUNT(*) FROM uye WHERE aktif=true"
    Set tum_uye=Conn.Execute(sql)
    tum=tum_uye(0)
    sql="SELECT * FROM uye WHERE DateDiff(""n"",son,Now)<=5 AND online=true ORDER BY son"
    Set tum_online=Conn.Execute(sql)
    If tum_online.Eof Then
    	tum_on = 0
    Else
    	tum_on=tum_online(0)
    End If
    %>
  • 13-01-2010, 09:37:00
    #8
    Üyeliği durduruldu
    Makaleyi hazırlayan kişiye çok teşekkür ederim.