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.