TEMMUZ10

Asp-Xml-Jquery ve Asp-Access-Jquery kullanarak accordion menü hazırlamak

ASP Programlama kategorisinde | [ 1856 ] kez okunmuş | [3] Yorum » | Yorum Yaz »

Bu konu ekleneli 3 ay'dan uzun bir süre geçmiş. Konu geçerliliğini kaybetmiş ve/veya içerdiği linkler yayında olmayabilir.

Jquery ile uğraşmak çok zevkli oluyor. Hele de uğraşının içine ASP kodlamaları, XML, veritabanı bağlantıları girince tadından yenmiyor desek doğru olur.

Buradaki Jquery Accordion Menü örneği çok hoşuma gider ve projelerimde kullanmaktan zevk alırım.

Bir müşterim için kendi hazırladığım javascript acordion menü artık hoşuma gitmemeye başlamış ve aynı müşterim için yeni bir proje daha hazırlamam gerekiyordu. Aynı mantıkla çalışan bir accordion menü kullanmak gerektiği için yukarıda bahsi geçen menü örneğini kullanayım dedim.

Proje; aynı kategorilerden ve ürünlerden oluşan iki sitenin tek bir veri havuzundan yararlanmasını ön görüyordu. Birisine kategori eklenmesi durumunda yeni sitede de görüntülenmesi ve o kategoriye eklenen ürünün de yeni sitede teşhir edilmesi gerekiyordu. Neden diye soranlar olacaktır.

Müşterim aynı bilgileri tek tek iki ayrı veritabanına girmek istemiyor :)

Her neyse bu işlemi MSSQL yada MySQL veritabanı kullanarak yapabilirdim ama geç kalmış olmak problem oldu. Önceki site veritabanı olarak Ms Access kullanıyordu. Bende xml ile verileri yeni siteye taşımayı uygun gördüm (Bir süre için)

Yukarıda bahsi geçen Accordion Menu'yü XML'den gelen bilgilerle oluşturmak için kodlamaya başladım.

Aşağıda XML veriler kullanarak Jquery ile Accordion Menü yapımının kodlarını bulacaksını. Bonus olarak da Veritabanı ile yapılmış halini istersiniz diye veritabanı ile çalışan halinin kodlarını ve çalışan halinide ekliyorum.

Kodlara geçelim. Bu kadar gevezelik yeter.

İlk olarak

JQuery'nin en son versiyonunu buradan indirebilirsiniz. İndirdikten sonra aşağıdaki gibi sayfanızın <head>...</head> kodları arasına ekliyoruz.


<script type="text/javascript" language="javascript" src="js/jquery.js"></script>

Css dosyamızıda hemen altına ekliyoruz.


<link href="css/acordion.css" rel="stylesheet" type="text/css" />

Menümüzün çalışması için gereken javascript kodlarına geldi sıra

Aşağıda, aynı görsele sahip fakat farklı kullanımlara sahip 3 menü için javascript kodumuz var. Kafanız karışmasın.


<script type="text/javascript">
$(document).ready(function()
{
 // ilk menü için (Tıklandıkça işlem yapan menü) gerekli kodlar
 $("#firstpane p.menu_head").click(function()
    {
  $(this).next("div.menu_body").slideToggle(300).siblings("div.menu_body").slideUp("slow");
 });
 // ikinci menü için (MouseOver ile işlem yapan menü) gerekli kodlar 
 $("#secondpane p.menu_head").mouseover(function()
    {
      $(this).next("div.menu_body").slideDown(500).siblings("div.menu_body").slideUp("slow");
 });  // Üçüncü menü için (Tıklandıkça işlem yapan menü -access db ile çalışan) gerekli kodlar
 $("#thirdpane p.menu_head").click(function()
    {
      $(this).next("div.menu_body").slideDown(500).siblings("div.menu_body").slideUp("slow");
 }); });
</script>

Kodlarda kullanacağımız 2 adet fonksiyonumuz ve Veritabanı bağlantı kodumuzu ekliyoruz.


<%
 ' XML dosyasına bağlanıyoruz
 Function GETHTTP(adres)
  Set StrHTTP = Server.CreateObject("MSXML2.ServerXMLHTTP.3.0" )
     On Error Resume Next
   StrHTTP.Open "GET" , adres, false
   StrHTTP.sEnd     If Err.Number = 0 Then
   retStr =StrHTTP.responseText
    Else
   retStr = "Bilgi Alinamadi. Lutfen tekrar deneyiniz."
    End If
   Set StrHTTP = Nothing
   GETHTTP =  retStr
 End Function  

' XML'den gelen verileri parçalamak için kullanıyoruz
 Function VeriCoz(Veri, Basla, Bit)
  iBaslangic = Instr(Veri, Basla)
  iBitis = Instr(Veri, Bit)
  VeriCoz = Mid(Veri, iBaslangic+Len(Basla), iBitis-(iBaslangic+Len(Basla)))
 End Function 

 ' Veritabanına bağlanıyoruz
 set objConn = Server.CreateObject("ADODB.Connection")
 objConn.Open = "Driver={Microsoft Access Driver (*.mdb)};Dbq="& Server.MapPath("db\acordion.mdb")
 
%>

İlk menü örneğimizi oluşturuyoruz. İlk menü örneği, Münüyü oluşturmak için  XML dosyasından alınan verileri kullanacak. Ve accordion işleminin oluşması için ana kategoriye tıklanması gereken bir yapıda olacak.


 <div id="firstpane" class="menu_list">
<%
 ' XML dosyamıza bağlanıyoruz
 strUrl = "http://localhost/acordion/db/kategori-liste.xml"
 xmlveri = GETHTTP(strURL)  ' Ana Kategorileri diziye atıyoruz
 arrAnaKategori = Split(xmlveri,"<kategori>")
 
 i = 0
 for each AnaKategori in arrAnaKategori
  if i > 0 Then
  
  ' Katregori Adımızı alıyoruz
  strKategoriAdi = VeriCoz(AnaKategori,"<kategoriadi>","</kategoriadi>")
  %>
  <p class="menu_head"><% =strKategoriAdi %></p>
  <%
   ' Kategorinin alt kategorilerini diziye atıyoruz
   arrAltKategori = Split(AnaKategori,"<altkategori>")
   
%>
  <div class="menu_body">
<%
   ii = 0
   for each AltKategori in arrAltKategori
    if ii > 0 Then
    ' alt kategorimizin adını alıyoruz
    strAltKategoriAdi = VeriCoz(AltKategori,"<altkatadi>","</altkatadi>")
    %>
  <a href="#"><% =strAltKategoriAdi %></a>
    <%
    end if
   ii= ii+1
   Next
%>
       </div>
<%   
  end if
 i= i+1
 Next
%>
  </div> 

 

İkinci Menü örneğindeki kodlar yukarıdaki ilk menüdekinin aynısı tek fark menünün içinde bulunduğu div'in ismi. (Java script'te karışışklık olmasın diye). Yinede kodlarını buraya ekliyorum. Kodlar aynı ama işlev olarak mouseOver efekti ile acoordion işlemi gerçekleşiyor.


 <div id="secondpane" class="menu_list">
<%
 strUrl = "http://localhost/acordion/db/kategori-liste.xml"
 xmlveri = GETHTTP(strURL)  arrAnaKategori = Split(xmlveri,"<kategori>")
 
 i = 0
 for each AnaKategori in arrAnaKategori
  if i > 0 Then
  strKategoriAdi = VeriCoz(AnaKategori,"<kategoriadi>","</kategoriadi>")
  %>
  <p class="menu_head"><% =strKategoriAdi %></p>
  <%
   arrAltKategori = Split(AnaKategori,"<altkategori>")
   
%>
  <div class="menu_body">
<%
   ii = 0
   for each AltKategori in arrAltKategori
    if ii > 0 Then
    strAltKategoriAdi = VeriCoz(AltKategori,"<altkatadi>","</altkatadi>")
    %>
  <a href="#"><% =strAltKategoriAdi %></a>
    <%
    end if
   ii= ii+1
   Next
%>
       </div>
<%   
  end if
 i= i+1
 Next
%>
  </div>   

Üçüncü ve son örnek veritabanında bulunan verilerle oluşan bir menü.


<div id="thirdpane" class="menu_list">
<%
  ' Yukarıda veritabanına bağlanmıştık
  ' Kayıt setini oluşturuyoruz
  Set objRs = Server.CreateObject("ADODB.RecordSet")
  
  'Gerekli bilgileri almak için SQL sorgumuzu oluşturuyoruz
  strSQL = "SELECt * FRom tblKategoriler WHERE fldKategoriSub = 0 ORDER by fldSira ASC"
  
  'SQL sorgumuzun cevabını objRs isimli kayıt setimize yüklüyoruz
  objRs.Open strSQL, objConn, 1, 3
   
   ' Eğer kayıt seti boş deilse
   if Not objRs.EOF Then
   
    ' Kayıt setindeki bilgileri döngüye sokup almaya başlıyoruz
    Do While Not objrs.EOF
  %>
  <p class="menu_head"><% =objRs("fldKategoriAdi") %></p>
  <%
    ' Ana kategoriye ait alt kategorilerin listesi için aşağıdaki kod bloğunu kullanıyoruz
    Set objRs1 = Server.CreateObject("ADODB.RecordSet")
    strSQL = "SELECt * FRom tblKategoriler WHERE fldKategoriSub = "& objRs("fldKategoriID") &" ORDER by fldSira ASC"
    objRs1.Open strSQL, objConn, 1, 3
     if Not objRs1.EOF Then
%>
  <div class="menu_body">
<%       
      Do While Not objrs1.EOF
%>
  <a href="#"><% =objRs1("fldkategoriAdi") %></a>
    <%
      objrs1.MoveNext
      Loop
%>
       </div>
<%   
     end if
    objrs1.Close
    Set objRs1 = nothing
    
    ' Kayıt setindeki sonraki kayıtı alıp sayfaya yazmak için döngüyü devam ettiriyoruz
    objRs.MoveNext
    Loop
    

   end if
   
  objrs.Close
  Set objRs = nothing

  
  objConn.close
  Set objConn = Nothing
%>
 
  </div>      

  • Yukarıdaki üç örneğinde çalışır halini incelemek isterseniz tıklayın.
  • Yukarıdaki üç örneği ve ilgili dosyaları içinde barındıran sıkıştırılmış dosyayı indirmek için tıklayın. (Lütfen indirdikten sonra virüs programınızla kontrol edin)

Bu yazı da burada bitiyor.

Umarım işinizi gören bir yazı olmuştur. Yorumlarınızla sayfamı şenlendirirseniz sevinirim :D

Yorumlar

omerfurkan1098 | 9/25/2009 5:43:16 PM
Merbaha
İSTANBUL 2010 da kültür başkenti olduğu etkinlikler düzenliyoruz yardım eden arkadaşında referansı olacağı bir site yaptırmak istiyoruz ama site konusunda tek anlamadığımız olay accordion ve accordion tasarımının actionscrept ile yapılması gerekiyormuş. http://www.beynelmilel.net/default_tr.html adresindeki accordion benzerini yapabilecek arkdaş benimle bağlantıya geçerse sevinirim. omerfurkan1098@hotmail.com
Merhaba, size konuyla ilgili bir mail gönderdim. Geç oldu ama umarım yardımcı olur.
9/30/2009 11:36:49 AM tarihinde yazılmıştır.
AHMET AKSU | 9/25/2009 4:24:20 PM
ismail bey merhaba
sizler gibi bilgilerini özgürce paylaşan birisini bulduğum için çok memnunum. istanbuldan yazıyorum ismim ahmet aksu. aslında size telefon ile ulaşacaktım ama pazartesini bekleyemedim.( bir arkadaşımda telefon numaranız var mış) öncelikle ben wep sitesi işi ile uğraşmıyorum anlamıyorumda bir şirkette idari işler sorumlusu olarak görev yapıyorum. kendimize bir wep sitesi yaptırıyoruz sonlara geldik diyebilrim.Ancak sizin yapmış olduğunuz akordiyon menü ürünlerimiz kısmında kullanmamız için tam aradığımız şey.fakat size gönderdiğim ve saklı kalmasını önemle rica edeceğim henüz yapım aşamasındaki linkimize bakacak olursanız. (http://test.grimor.com/ozkanmerve/urunler.asp?p=u&ID=23&KokID=10) biz burda sizin yapmış olduğunuz akardiyon menünün bu linkteki soldaki menüyü (http://www.ismailkaplan.com/demo/acordion/index.asp#) kullanmak istiyoruz. ancak yapımcı şirket bize bunun mümkün olmayacağını aslında mümkün fakat böyle yaparlar ise tarafımızdan güncellenemeyeceğini söylediler.(bizim sitede ana sayfa hariç diğer bütün sayfalar tarafımızdan güncellenebilir şekilde yaptırıyoruz.) böyle birşey var mı ? yoksa hem istediğimiz menüyü kullanıp hemde sayfa güncellenebilir olabilir mi? konu hakkında bilgi verirseniz çok sevinirim . şimdiden çok teşekkür ederim
saygılarımla
Merhaba, geciken cevabım için üzgünüm. Telefonla yaptığımız görüşmede isteğinizin olabileceğini belirtmiştim. İLgili arkadaşlar benimle irtibata geçti ve onlara yapılabilecek düzenlemeler ile ilgili bilgi gönderdim. Umarım işinizi görür :)
9/30/2009 11:26:32 AM tarihinde yazılmıştır.
ahmet erboğa | 8/3/2009 3:37:03 PM
Merhaba...Değerli bilgilerinizi bizlerle paylaştığınız için çok teşekkür ederim..
Benim sizden bir isteğim olacak..Vaktiniz olursa acces veri tabanına bağlı olarak çalışan , alt kategorileri yana doğru açılan bir menu tasarlamanız..Eğer bu şekilde bir menu tasarlar ve bizimle paylaşırsanız çok memnun olurum...İyi çalışmalar dilerim...

Konu hakkında düşüncelerinizi paylaşın

İsim / Nick

E-posta (Görüntülenmeyecektir)

web sitesi

Güvenlik Kodu Yandaki rakamları aşağıdaki kutuya yazınız