ASP de sınırsız alt kategori - Sınırsız kategorileme nasıl yapılır?

ASP de sınırsız alt kategori - Sınırsız kategorileme nasıl yapılır?
ASP de sınırsız alt kategori - Sınırsız kategorileme nasıl yapılır?

Asp 'de sonsuz alt kategori listeleme bir diğer adıyla recursive method ile sınırsız alt kategorileme / sonsuz listeleme nasıl yapılır sorusunun cevabını arayan arkadaşlara yardımcı olmak için hemen anlatalım.

Şu an anlattığım şey tam olarak Asp'de recursive methods yani türkçeye zorla çevrilmiş hali ile özyinelenmiş fonksiyon yani sınırsız alt kategori yapımı.

Burada size sadece hangi fonksiyonlar nerede nasıl kullanılıyor onu anlatacağım. Scriptin çalışan halini aşağıdaki linkten indirip kendiniz daha detaylı inceleme ve kurcalama fırsatı bulabilirsiniz.

Aşağıdaki şemadan da anlaşılabileceği gibi sınırsız kategorilemenin işleyiş mantığı, önce üst kategorisi 0 olan tüm kategorileri yazdır, daha sonra bu kategorilerin her biri için alt kategori varmı kontrol et, eğer var ise o kategorileri yazdır ve tekrar bu yazdırdığım kategorilerin alt kategorisi var mı kontrol et eğer varsa yazdır.. Aslında bu şekilde kör bir döngüdür sınırsız kategorilemenin mantığı.

[Asp de sınırsız alt kategori listeleme]

Hemen kodları yazarak örnek oluşturalım.

<%
session.CodePage = 65001 ' UTF8 İÇİN GEREKLİ

veritabani=server.mappath("kategori.mdb")
set baglanti=server.createobject("adodb.connection")
baglanti.open " Data Source = "& veritabani &";Provider=Microsoft.Jet.OLEDB.4.0"


function ulyazmaicinkontrol(id) 'BU FONKSİYONDA EĞER ALT KATEGORİ VARSA UL YAZMAK İÇİN KONTROL EDİYOZ
Set birincil=Server.CreateObject("Adodb.Recordset")
Sorgu="Select * from kategori where ust_kategori="&id&" order by id"
birincil.Open Sorgu, baglanti, 1, 3
if birincil.bof then ulyazmaicinkontrol=0
if not birincil.bof then ulyazmaicinkontrol=1
birincil.close
set birincil=nothing
end function
 'BU FONKSİYONDA EĞER ALT KATEGORİ VARSA UL YAZMAK İÇİN KONTROL EDİYOZ

function kategorikontrol(id) 'BU FONKSİYONDA ALT KATEGORİSİ VARMIYMIŞ VARSA BAK VE KATEGORİYAZI ÇAĞIR 
Set birincil=Server.CreateObject("Adodb.Recordset")
Sorgu="Select * from kategori where ust_kategori="&id&" order by id"
birincil.Open Sorgu, baglanti, 1, 3
if not birincil.bof then call kategoriyaz(id)
birincil.close
set birincil=nothing
end function 
 'BU FONKSİYONDA ALT KATEGORİSİ VARMIYMIŞ VARSA BAK VE KATEGORİYAZI ÇAĞIR 

sub kategoriyaz(id) 'BU FONKSİYONDA KATEGORİLER LİSTELETTİRİYORUZ. 
Set ikincil=Server.CreateObject("Adodb.Recordset")
Sorgu="Select * from kategori where ust_kategori="&id&" order by id"
ikincil.Open Sorgu, baglanti, 1, 3
do until ikincil.eof
 

response.Write "

  • "&ikincil("kategori_adi")&""&vbcrlf
    if ulyazmaicinkontrol(ikincil("id"))=1 then response.Write("
    • ")&vbcrlf
      kategorikontrol(ikincil("id"))&vbcrlf
      if ulyazmaicinkontrol(ikincil("id"))=1 then response.Write("
    ")&vbcrlf
    response.Write "
  • "&vbcrlf
        
    ikincil.movenext
    loop
    ikincil.close
    set ikincil=nothing
    end sub
      'BU FONKSİYONDA KATEGORİLER LİSTELETTİRİYORUZ.

    response.Write("
    • ")&vbcrlf
      call kategoriyaz(0)
      response.Write("
    ")&vbcrlf

    baglanti.close
    set baglanti=nothing
    %>


    Umarım faydalı olmuştur.

     

    Projenin (scriptin) çalışan halini buradan indirebilirsiniz. 

Bugün bir iyilik yap, bu yazıyı arkadaşlarınla paylaş :

BU YAZIYI OKUYANLAR BUNLARI DA OKUDU

YORUMLAR

  1. profilRamazan

    Bir emlak sitesi yapıyorum bu sitede ketegori ve alt kategorilar var Emlak eklenirken özellikler tablosuna aralarında virgül gelerek özellikler ekliyorum örnek 23 , 24 , 25 buraya kadar her şey doğru

    özellikler ise şu şekilde

    özellikler tablosu ozellikler id/adi/katid

    özellikler kategorisi tablosu okat id/adi/sira / ekatid ( ekatid emlak kategorisi açılırken ki üst kategori isimleri gösteriyor yani konut kategorisi satılık konut kiralik konut alt kategorisi var ben özellikler kategorisi açarken soruyorum bunu hangi üst kategoride kullanacaksın böylece ilan eklerken özellik ekledigimizde o kategoriye özel ilan özelligi getiriyorum.

    buraya kadar kaydetmesinde göstermesinde hata yok

    lakin ilan detay sayfasında

    <%
    Set emlak=Connect.Execute("Select * from emlak where id="&id&"")
    emlakkat=emlak("kategori")

    Set ekat=Connect.Execute("Select * from kategori where id="&emlakkat&"")

    if not ekat.eof then
    do while (not ekat.eof)
    okatne=ekat("ustkat")

    Set okat=Connect.Execute("Select * from Okat where ekatid="&okatne&" order by id asc")
    if not okat.eof then
    do while (not okat.eof)

    %><div class="ozelliklistesi"> <p class="ozelliklistesibaslikbg"><%=okat("adi")%></p><ul>
    <%
    Set ozellik=Connect.Execute("Select * from ozellikler where katid="&okat("id")&" order by id desc")
    do while (not ozellik.eof)

    %>
    <li><%=ozellik("adi")%></li>
    <%ozellik.movenext
    loop
    %></ul><div class="clear"></div> </div>
    <%
    okat.movenext
    loop
    end if

    ekat.movenext
    loop
    end if
    %>

    şu kodlarla o kategoriye ait özellikleri çekiyorum sorun yok emlaktaki virgüllü yazıları parçalayıp parçaladığımıda buradakilerle eşleştirip işaretli yapmak istiyorum ama yapamıyorum parçalıyorum id virgülleri ama buradaki listede nasıl onları eşitleyip işaretliyecegim.

    • Hafzullah YILDIRIM

      Merhabalar Ramazan bey;
      Bu istediklerinizi inStr komutu ike çok kolayca yapabilirsiniz.

      Örneğin;

      <%
      Dim idlerim,isle
      idlerim="1,2,3"
      isle=InStr(idlerim,”3”)
      Response.Write(isle)
      %>

      Bu aldığın sonuca göre eğer o kaydın verisi idlerinin içerisinde var ise seçtirebilirsin. Anlattıklarınızı yaptığınıza göre bu dediklerimi de rahat bir şekilde yapabilirsiniz. Kolay gelsin, iyi çalışmalar.

Yorum yap

Geçersiz bir mail adresi girdiniz. Lütfen tüm zorunlu alanları doldurun. *