Makale Özeti

Bu makalede AdRotator kontrolüne bağlanacak reklam verilerini XML tabanlı bir dosya yerine, veritabanından nasıl getirebileceğimizi göreceğiz. Hazırlayacağımız uygulamada, veritabanında aynı zamanda bir reklamın kaç kez görüntülendiği, reklama kaç kez tıklandığı gibi bilgileri de kaydedip, sitemiz için komple bir reklam yönetim sistemi geliştireceğiz.

Makale

AdRotator, ASP.NET uygulamalarında dönüşümlü olarak reklamları veya tanıtıcı resim dosyalarını görüntülenmesini sağlayan kontroldür. Resim dosyalarını görüntülemenin yanında, hangi resim dosyasının ne sıklıkla görüntüleceği gibi bir işlevselliği de yapısı itibariyle sağlamaktadır. Yine anahtar kelime tanımlamaları (keyword) ile yayınlacak reklamları sahip oldukları kelimelere göre süzülmesi ve buna göre yayınlanmasını otomatik olarak sağlamaktadır. Bu işlemleri yapabilmek için temel olarak uygulama içerisindeki bir XML dosyası kullanılmaktadır. Belirli bir formatta yazılan reklam bilgileri, XML dosyası içerisine kaydedilerek AdRotator kontrolüne bağlanıp reklamların kolay bir biçimde site içerisinde dönüşümlü şekilde görüntülenmesi sağlanır. Aşağıdaki 3 tane reklam içeren ve AdRotator için kullanılabilecek özelliklere sahip bir XML dosyası örneği bulunmaktadır.

<?xml version="1.0" encoding="utf-8" ?>
<Advertisements>
  <Ad>
     <AlternateText>NedirTV</AlternateText>
     <ImageUrl>images/nedirtv.jpg</ImageUrl>
     <NavigateUrl>http://www.nedirtv.com</NavigateUrl>
     <Impression>5</Impression>
     <Keyword>video</Keyword>
  </Ad>
  <Ad>
     <AlternateText>MS Akademik</AlternateText>
     <ImageUrl>images/msakademik.gif</ImageUrl>
     <NavigateUrl>http://www.msakademik.net</NavigateUrl>
     <Impression>3</Impression>
     <Keyword>makale</Keyword>
  </Ad>
  <Ad>
     <AlternateText>Yazgeliştir</AlternateText>
     <ImageUrl>images/yazgelistir.gif</ImageUrl>
     <NavigateUrl>http://www.yazgelistir.com</NavigateUrl>
     <Impression>5</Impression>
     <Keyword>makale</Keyword>
  </Ad>
</Advertisements>

Bu şekilde hazırlanan bir XML dosyası AdRotator kontrolünün AdvertisementFile özelliğine dosya yolu belirtilerek bağlanıp kullanılabilir. Dosyadaki her <ad> boğumu bir reklamı tanımlar. Buradaki <AlternateText> resmin alt metnini, <ImageUrl> resim dosyasının yolunu ve adını, <NavigateUrl> ise resme tıklandığında hangi URL'ye gidileceğini belirler. XML dosyası içerisinde tanımlı olan <Impression> boğumundaki değer ise, o reklamın gösterilme sıklığını belirlemektedir. Bu sıklık herhangi bir yüzdesel oran değil, diğer reklamlara göre ne kadar sıklıkta görüntüleneceğidir. (Örneğin Impression değeri 10 olan bir reklam, Impression değeri 5 olan bir reklama göre yaklaşık 2 kat fazla gösterilecektir.) <Keyword> alanında ise o reklama ait anahtar kelime veya kelimelerin tanımlaması yapılır. AdRotator kontrolünün KeywordFilter özelliğine verilecek anahtar kelime ile XML dosyasındaki <Keyword> alanındaki kelimenin eşleşmesi durumunda, reklamın/reklamların seçilmesi ve görüntülenmesi sağlanır. Bu şekilde basit bir XML dosyasına tanımlanan reklam bilgileri ile site içerisinde kullanılabilecek reklam dönüşüm sistemi oluşturabiliriz.

XML ile AdRotator kullanım oldukça pratik ve kolaydır. Fakat burada bizleri kısıtlayıcı bazı özellikler olduğu gibi, yine yapılmasını isteyebileceğimiz bazı ek işlemleri de gerçekleştirmekte de bazı sıkıntılarla karşılaşabiliriz. Reklamları dinamik şekilde değiştirme işlemi gerçekleştirmek için her seferinde XML dosyasını açıp değişiklikler yapmak, aslında bir programcı için kısıtlayıcı bir unsurdur. Bu noktada reklamları XML dosyasında saklamak yerine veritabanında tutmak, özellikle sıklıkla güncellenecek reklam bilgileri için programcıya veya site yöneticisine dinamik bir yapı ve dolayısıyle kolaylık sağlayacaktır. Yine reklamlarla ilgili olarak; bir reklamın kaç kez görüntülendiği, o reklama kaç kez tıklandığı gibi istatistiklerin tutmakta böyle bir sistemde oldukça zengin bir işleyiş sunacaktır.

Yukarıda bahsedilen sorunları XML dosyasını kullanarak gerçekleştirmek zahmetli ve zor işlemler gerektirecektir. AdRotator ile ilgili olarak bu sorunları aşmak için, öncelikli olarak AdRotator kontrolüne bağlanacak olan verileri bir XML dosyasından getirmek yerine, veritabanındaki bir tablodan getirmek gerekecektir. Bu bize reklamların değiştirilmesini, yeni reklamların eklenmesini sağlamak ve reklamlar hakkında istatistikler tutmak için oldukça esnek ve kolay bir yapı sağlayacaktır. Bunun için öncelikli olarak kendimize bir tablo oluşturup, reklamlar ile ilgili yukarıdaki XML dosyasındaki bilgileri bu tablo içerisinde taşıyalım. Tablomuzu oluşturmaya geçmeden önce tablomuzda başka ne gibi bilgileri de tutabileceğimizi düşünelim. XML dosyasındaki bilgilerin dışında yine yukarıda bahsettiğimiz reklam görüntüleme sayısı, reklama tıklama sayısı, hatta reklamın o an güncel olup olmadığı gibi bilgileri de aynı tablo içerisinde tutmak yapacağımız işlemleri oldukça kolaylaştıracaktır. Gelin bu şekilde kendimize Reklamlar adında bir tablo oluşturalım. Aşağıdaki şekilde, SQL Server üzerinde kurulmuş bir tablonun kolon isimleri ve taşıyacağı değerler görünmektedir.


Reklamlar Tablosu

Tablomuzdaki alanları isimlendirirken AdRotator'a alanları kolay bir şekilde tanıtabilmek için AlternateText, ImageUrl, NavigateUrl, Impression ve Keyword kısımlarını XML dosyasındaki aynı isimlerle adlandırmamız gerekecektir. Bu şekilde tablo verileri AdRotator'a bağlandığınde alanlar otomatik olarak algılanacaktır. ID tablonun primary key'i, Link reklam URL'si, Durum reklamın aktif olup olmadığı, Goruntuleme reklamın görüntülenme sayısını ve Tiklama reklama kaç kez tıklanıldığı bilgilerini taşıyacak alanlardır. Bu şekilde tasarladığımız tablo içerisine artık verilerimizi ekleyerek, AdRotator kontrolüne bu verileri nasıl bağlayabileceğimizi görelim.


Reklamlar tablosu içerisine dört tane reklam eklendi

Burada sistemimizin kolay şekilde işleyebilmesi için NavigateUrl alanı içerisine direk olarak reklamın URL'si yerine, sitemiz içerisinde hangi reklama tıklandığını yakalamamızı sağlayacak bir sayfayı eklememiz gerekecektir. (reklam.aspx) Yine bu sayfaya parametre olarak yollayacağımız bilginin reklamın ID kolonundaki değer olması da işlemlerimizi kolaylaştıracaktır. Bu nedenle NavigateUrl alanına ID değeri 1 olan reklam dosyası için reklam.aspx?ID=1 gibi bir değer vermeliyiz.

Artık tablodan alınan verilerin AdRotator'a bağlanması işlemini gerçekleştirebiliriz. Bunun için öncelikli olarak AdRotator bulunan sayfamızın Page_Load kısmında tablomuza bağlanıp, reklam bilgilerini çekerek bir veri nesnesine bağlamak ve bu nesneyi de AdRotator'ın DataSource özelliğine atamamız gerekecektir. Aşağıda bu işlemin gerçekleşmesini sağlayan kodlar bulunmaktadır.

protected void Page_Load(object sender, EventArgs e)
{
   // Ornek isimli veritabanina baglanti cumlesi olusturuluyor. 
   SqlConnection conn = new SqlConnection("data source=.; initial catalog=Ornek; integrated security=true")) 
   // Tablodan reklam bilgilerini getirecek sorgu cumlesi hazirlaniyor 
   SqlCommand comm = new SqlCommand("SELECT AlternateText, ImageUrl, NavigateUrl, Impression FROM Reklamlar WHERE Durum='True'", conn); 
   DataTable dt = new DataTable(); 
   SqlDataAdapter da = new SqlDataAdapter(comm); 
   da.Fill(dt);
// DataTable nesnesine eklenen veriler, AdRotator'a veri kaynagi olarak gosteriliyor ve veriler yukleniyor 

   AdRotator1.DataSource = dt; 
   AdRotator1.DataBind(); 
}

Böylece sayfa çalıştırıldığında tabloda o an aktif olan reklamların bilgileri AdRotator'a bağlanacak ve AdRotator dönüşümlü bir şekilde reklamların görüntülenmesini sağlayacak. Peki reklam bilgilerini sayfamızda görüntüledik, ama şu anda sayfamızda hangi reklam yer alıyor? Yukarıdaki işlemler tablodan tüm reklam bilgilerini getirdi. Bir DataTable nesnesine atılan reklamlar kontrolümüzün DataSource özelliğine bağlandı. AdRotator ise bu reklamlardan bir tanesini kendi içerisindeki algoritma ile seçti ve sayfada görüntüledi. İşte bu noktada AdRotator'un hangi reklamı seçtiğini yakalamamız ve buna göre de sayfada görüntülenen reklamın tablodaki Goruntuleme alanını 1 arttırmamız gerekecek. Böylece reklam yönetim sistemimizdeki en önemli işlemlerden biri olan reklam görüntüleme sayısını tutmayı başaracağız.

AdRotator kontrolünün olayları (event) içerisinde yer alan Ad_Created event'i, kontrolün reklam kaynağından bilgiler aldığında tetiklenen event'idir. Ad_Created event'ini bir metoda bağlayacak olursak, metodun parametrelerinden ikincisinin AdCreatedEventArgs sınıfından (class) e adında bir değer taşıdığını göreceğiz. İşte buradaki e değeri, o an sayfaya eklenen reklam hakkında bazı bilgileri elde etmemizi sağlayacaktır.


e nesnesi üzerinden o an sayfaya eklenen reklam hakkında bilgiler elde edilebilir

Burada karşımıza çıkan NavigateUrl adresi içerisinde reklamın ID değerini de taşıdığı için bizim reklamın bulunduğu satırı ele alabilmemizi sağlayacaktır. AdRotator1_AdCreated metodu içerisinde yapacağımız işlemlerle tablodaki Goruntuleme alanındaki değerin güncellenmesini ve 1 arttırılmasını sağlayabiliriz. Aşağıdaki tabloda bu işlemler için gerekli kodlar yer almaktadır.

protected void AdRotator1_AdCreated(object sender, AdCreatedEventArgs e)

   SqlConnection conn = new SqlConnection("data source=.; initial catalog=Ornek; integrated security=true");
   string id = e.NavigateUrl; 
   // 15. karakterden sonraki deger bize reklamin ID degerini verecektir. reklam.aspx?ID=3 icerisinden 3 degeri gibi... 
   id = id.Substring(15); 

   // id degeri alinan reklamin bulundugu satirda Goruntuleme alanini 1 arttirarak guncelliyoruz 
   SqlCommand comm = new SqlCommand("UPDATE Reklamlar SET Goruntuleme=Goruntuleme+1 WHERE ID=@ID", conn); 
   comm.Parameters.AddWithValue("@ID", id); 
   conn.Open(); 
   comm.ExecuteNonQuery(); 
   conn.Close(); 
}

! NOT: Buradaki id.SubString(15) ifadesi reklam.aspx?ID=1 gibi bir linkteki 1 değerini alabilmek için yapılan string bölme işlemidir. Dosya adının ve parametre adının farklı olması durumunda bu ifadede değişiklik yapmak gerekecektir.

Böylece sayfaya getirilen reklamı AdCreated event'i içerisinde yakaladık ve görüntülenme sayısını tablo içerisinde güncelleme işlemi yaparak arttırdık. Şimdi sıra reklama tıklanması durumunda tablodaki ilgili reklamın Tiklanma alanının 1 arttırılarak, reklamların tıklanma sayılarının tutulmasında. Dikkat edeceğiniz gibi reklam bilgilerini sakladığımı tabloda reklamın adresinin Link alanında tuttuk. NavigateUrl alanında ise sitemizin içerisindeki bir dosyanın linkini verdik. Az sonra hazırlayacağımız bu sayfada tıklanan reklamın Tiklanma alanının arttırılması işlemini gerçekleştirerek, sayfanın asıl reklam linkine yönlendirilmesini sağlayacağız.

reklam.aspx.cs sayfasının Page_Load metodu içerisinde öncelikli olarak QueryString'den ID bilgisini almak, ID'ye sahip reklamın Tiklanma alanını güncellemek ve reklamın asıl adresine yönlendirme yapmak gerekiyor. Aşağıda bu işlemleri gerçekleştirmek için gerekli kodlar yer almaktadır.

reklam.aspx.cs
protected void Page_Load(object sender, EventArgs e)
{
   if (Request.QueryString["ID"] != null) 
   { 
      string reklamID = Request.QueryString["ID"]; 

      SqlConnection conn = new SqlConnection("data source=.; initial catalog=Ornek; integrated security=true"); 


      // Reklamın tıklanma sayısı güncelleniyor
      SqlCommand comm = new SqlCommand("UPDATE Reklamlar SET Tiklama=Tiklama+1 WHERE ID=@ID", conn);
      comm.Parameters.AddWithValue("@ID", reklamID); 
      conn.Open(); 
      comm.ExecuteNonQuery(); 
      conn.Close();
 

      // Reklamın URL adresi alınıyor
      SqlCommand selectComm = new SqlCommand("SELECT Link FROM Reklamlar WHERE ID=@ID",conn);
      selectComm.Parameters.AddWithValue("@ID", reklamID); 
      conn.Open(); 
      string url = selectComm.ExecuteScalar().ToString(); 
// Reklamın URL'si alında
      conn.Close();

      // Reklamın adresine yönlendirme yapılıyor
      Response.Redirect(url);
   }
}

Artık sayfamızı çalışıtırıp görüntülenen reklama tıklama zamanı! Birden fazla reklam gösterimi yaparak ve bu reklamların bazılarına tıklayarak Reklamlar tablosundaki değişiklikleri gözlemleyebiliriz.

 


Gösterilen reklama tıklandığında, o reklamın tıklanma sayısını arttırıldı ve reklamın sitesine yönlendirme yapıldı 

Bu makalemizde AdRotator kontrolüne bağlanacak reklam verilerini veritabanında bir tablo içerisinde nasıl tutabileceğimizi gördük. Yine tabloda tutulan reklamlarda ilgili olarak reklamın aktif olup olmadığı, reklamın gösterim sayısı ve reklama tıklama sayısını da tutarak sitemiz için komple reklam yönetim sistemi geliştirmiş olduk. Umarım projelerinizde kullanabileceğimiz faydalı bir sistem geliştirmişizdir.

Bir başka makalede görüşmek dileğiyle...


Uğur UMUTLUOĞLU
http://www.nedirtv.com