Makale Özeti

Merhaba arkadaşlar bu makalemde ufak bir reklam yönetim uygulaması yazacağız. Resim, metin ve swf reklamlarımızı sayfamızda göstermeyi göreceğiz.

Makale

Asp.Net Reklam Yönetimi

Merhaba arkadaşlar bu makalemde ufak bir reklam yönetim uygulaması yazacağız. Resim, metin ve swf reklamlarımızı sayfamızda göstermeyi göreceğiz.
Yine ilk iş olarak veri tabanımızı oluşturmak ile başlıyoruz.


Veri tabanımızı yukarıdaki gibi oluşturup Reklamlar adında kaydedelim. Tablodan da anlaşıldığı gibi Reklamın adını, Türünü ( Resimmi, metinmi, flashmı), Linkini, açıklamasını, genişliğini, yüksekliğini ve linkini veriyoruz. Sayfamıza Reklam adında bir klasör oluşturalım. Reklam dosyalarımızı bu klasöre upload edicez. ReklamEkle adında bir sayfa açıp tasarımını aşağıdaki gibi yapıyoruz.


Kontrollerimizin isimleri sırasıyla txtReklamAdi, dropReklamTuru, fuReklamYolu, txtAciklama, txtGenislik, txtYukseklik, txtLink ve Button1
Bu formda Reklamın adını, Reklamın türünü ve reklam dosyamızı seçip diğer bilgileride girip Kaydet butonuna bastıktan sonra dosyamızı klasöre, bilgilerimizi ise veri tabanına kaydettirelim.

Öncelikle ben veri tabanı işlemlerinde kolaylık sağlaması açısından bir class kullandım. Bu class ile Datarow çağırma, veritabanına bağlanma, datatable çağırma, dataset çağırma, sql cümlesi çalıştırma gibi işlemleri yapabiliyoruz. Classı aşağıda paylaşıyorum.Bundan sonraki örneklerdede işinize yarayacaktır. Class dosyamın ismi Fonksiyon.cs bu classı öncelikle oluşturun. Metodların ne işe yaradığı üstünde yazmaktadır.

using System;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Text;
 
public class Fonksiyon
{
    //********************************************************************
    //Veri Tabanı Bağlantısı
      public SqlConnection baglan()
      {
        SqlConnection baglanti = new SqlConnection(@"Data Source=localhost;Initial Catalog=TestPort;Integrated Security=True;");
        baglanti.Open();
        return (baglanti);
      }
    //********************************************************************
    //Sql Sorgu Çalıştırma
    public int cmd(string sqlcumle)
    {
        SqlConnection baglan = this.baglan();
        SqlCommand sorgu = new SqlCommand(sqlcumle, baglan);
        int sonuc = 0;
 
        try
        {
            sonuc = sorgu.ExecuteNonQuery();
        }
        catch (SqlException ex)
        {
            throw new Exception(ex.Message + " (" + sqlcumle + ")");
        }
        finally
        {
            sorgu.Connection.Close();
        }
        return (sonuc);
    }
    //********************************************************************
    //Kayıt Sayısı Bulma
    public string GetDataCell(string sql)
    {
        DataTable table = GetDataTable(sql);
        if (table.Rows.Count == 0)
            return null;
        return table.Rows[0][0].ToString();
    }
 
    //Kayıt Çekme
    public DataRow GetDataRow(string sql)
    {
        DataTable table = GetDataTable(sql);
        if (table.Rows.Count == 0) return null;
        return table.Rows[0];
       
    }
 
    //DataTable ye veri çekme
    public DataTable GetDataTable(string sql)
    {
        SqlConnection baglan = this.baglan();
        SqlDataAdapter adapter = new SqlDataAdapter(sql,baglan);
        DataTable dt = new DataTable();
 
        try
        {
            adapter.Fill(dt);
 
        }
        catch (SqlException ex)
        {
            throw new Exception(ex.Message + " (" + sql + ")");
        }
        finally
        {
            adapter.Dispose();
            baglan.Close();
        }
        return dt;
    }
 
    //Datasete veri çekme
    public DataSet GetDataSet(string sql)
    {
        SqlConnection baglan = this.baglan();
        SqlDataAdapter adapter = new SqlDataAdapter(sql, baglan);
        DataSet ds = new DataSet();
        try
        {
            adapter.Fill(ds);
        }
        catch (SqlException ex)
        {
            throw new Exception(ex.Message + " (" + sql + ")");
        }
        finally
        {
            ds.Dispose();
            adapter.Dispose();
            baglan.Close();
        }
        return ds;
    }
 
    public static string ReklamSorgula(string ReklamId)
    {
        string Id = ReklamId;
        string deger = "";
        SqlConnection baglanti = new SqlConnection(@"Data Source=localhost;Initial Catalog=TestPort;Integrated Security=True;");
        baglanti.Open();
        //Metoda gelen ReklamId reklamının bilgilerini çekiyoruz.
        SqlCommand cmdReklam = new SqlCommand("Select * from Reklamlar Where ReklamId=" + Id, baglanti);
        SqlDataReader drReklam = cmdReklam.ExecuteReader();
        if (drReklam.Read())
        {
            if (drReklam["ReklamTuru"].ToString() == "Resim")
            {
                //Eğer Reklamımız Resim ise html ile img kontrolü yazdırıyoruz ve Reklamyonlen sayfasına link veriyoruz.
                deger = "<a href='ReklamYonlen.aspx?ReklamId=" + drReklam["ReklamId"] + "'><img width='" + drReklam["Genislik"].ToString() + "' height='" + drReklam["Yukseklik"].ToString() + "' border='0' alt='" + drReklam["Aciklama"] + "' src='Reklam/" + drReklam["ReklamYolu"].ToString() + "' /></a>";
            }
            if (drReklam["ReklamTuru"].ToString() == "Metin")
            {
                //Eğer reklamımız metin ise Reklam olarak Açıklama satırını çektiriyoruz
                deger = "<a class='normal' href='ReklamYonlen.aspx?ReklamId=" + drReklam["ReklamId"] + "'>" + drReklam["Aciklama"].ToString() + "</a>";
            }
            if (drReklam["ReklamTuru"].ToString() == "Flash")
            {//Eğer reklamımız Flash ise swf yi ekranda göstermek için object kodu ile flashın yolunu çektiriyoruz.
                deger =
                "<object classid=clsid:D27CDB6E-AE6D-11cf-96B8-444553540000 codebase=http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0 width=" + drReklam["Genislik"].ToString() + " height=" + drReklam["Yukseklik"] + ">" +
                "<param name=movie value=Reklam/" + drReklam["ReklamYolu"].ToString() + " />" +
                "<param name=quality value=high />" +
                "<embed src=Reklam/" + drReklam["ReklamYolu"].ToString() + " quality=high pluginspage=http://www.macromedia.com/go/getflashplayer type=application/x-shockwave-flash width=" + drReklam["Genislik"] + " height=" + drReklam["Yukseklik"] + "></embed>" +
                "</object>";
            }
        }
        drReklam.Close();
        cmdReklam.Dispose();
        baglanti.Close();
        //En Son çıkan reklamıda çağırıldığı yere gönderiyoruz.
        return deger;
    }
}

Class dosyamızı tanıttığımıza göre şimdi işlemlerimize başlayabiliriz. Fakat dikkatinizi classdaki son metod olan ReklamSorgula metoduna çekmek istiyorum. Burası ilk etapda karışık gelebilir anlatımını reklamlarımızı çağırırken anlatacağım. Şimdi reklam kaydetme sayfamızın kodlarına gelelim.  İlk olarak Gerekli Namespace leri ekliyoruz.

using System.IO;
using System.Text.RegularExpressions;
using System.Data.SqlClient;

Kaydet butonuna gelelim ve kodlarımızı yazmaya başlayalım. Kodları yazarken açıklama satırlarında yaptığımız işlemleri anlatıyorum.

protected void Button1_Click(object sender, EventArgs e)
    {
        //Dosya seçilmişmi kontrolü yapıyoruz.
        if (fuReklamYolu.HasFile)
        {
            //O günün tarih saat bilgilerinden resim adı oluşturuyoruz.
            reklamadi = DateTime.Now.Day.ToString() + DateTime.Now.Month + DateTime.Now.Year + DateTime.Now.Hour + DateTime.Now.Second + DateTime.Now.Minute + DateTime.Now.Millisecond;
            //Dosyanın uzantısını alıyoruz.
            uzanti = System.IO.Path.GetExtension(fuReklamYolu.PostedFile.FileName);
             //Uzantı Kontrolü yapıyoruz.
            if (Regex.IsMatch(uzanti, ".jpg|.jpeg|.gif|.png|.bmp|.swf") == false)
            {
                lblBilgi.Text = "Lütfen resim veya flash dosyası upload ediniz";
            }
            else
            {
                //Dosyamızı Reklam klasorune kaydediyoruz.
                fuReklamYolu.SaveAs(Server.MapPath("..//Reklam//" + reklamadi + uzanti));
            }
        }
        else
        {
            //Reklam dosyası seçilmemişse reklamın adını ve uzantısını boş olarak kaydettiriyoruz.
            reklamadi = "";
            uzanti = "";
        }
 
        ///Formdan gelen reklam bilgilerini veri tabanına kaydediyoruz.
        SqlConnection baglanti = system.baglan();              //Veri Tabanına istediğiniz yöntem ile bağlanabilirsiniz. Ben bağlantı nesnemi class dosyamdan alıyorum
        SqlCommand cmdReklam = new SqlCommand(span style="COLOR: #a31515">"Insert into Reklamlar(ReklamAdi,ReklamTuru,ReklamYolu," +
            "Aciklama,Genislik,Yukseklik,Link,Kurum) values(@ReklamAdi,@ReklamTuru,@ReklamYolu,@Aciklama," +
            "@Genislik,@Yukseklik,@Link,@Kurum)", baglanti);
        cmdReklam.Parameters.Add("ReklamAdi", txtReklamAdi.Text);
        cmdReklam.Parameters.Add("ReklamTuru", dropReklamTuru.SelectedValue);
        cmdReklam.Parameters.Add("ReklamYolu", reklamadi + uzanti);
        cmdReklam.Parameters.Add("Aciklama", txtAciklama.Text);
        cmdReklam.Parameters.Add("Genislik", txtGenislik.Text);
        cmdReklam.Parameters.Add("Yukseklik", txtYukseklik.Text);
        cmdReklam.Parameters.Add("Link", txtLink.Text);
        cmdReklam.Parameters.Add("Kurum", dropKurum.SelectedValue);
 &n        cmdReklam.ExecuteNonQuery();
    }

Reklam kaydetme sayfamızı oluşturmuş olduk. Açıklamalarda teker teker ne yaptığımız yazılı. Şimdi ise reklamlarımızı listeleyeyip yönetebileceğimiz sayfamızı oluşturalım. Reklamlar.aspx adında bir sayfa oluşturalım ve içerisine bir adet Repeater koyalım.

<span style="FONT-SIZE: 10pt; COLOR: #a31515">asp:Repeater ID="Repeater1" runat="server">
    <ItemTemplate>
        <table width="490" border="0" align="center" cellpadding="1" cellspacing="1">
            <tr>
                <td width="168" class="normal">&#8226;&nbsp; <%#Eval("ReklamAdi")%></td>
                <td width="134" class="normal"><%#Eval("ReklamTuru") %></td>
                <td width="27"><div align="center">
                <a href='ReklamGuncelle.aspx?ReklamId=<%#Eval("ReklamId")%>'>
                <img border="0" src="Images/guncelleicon.jpg" width="16" height="16" />        </a>
                </div></td>
                <td width="24"><div align="center">
                <a href='Reklamlar.aspx?islem=Sil&ReklamId=<%#Eval("ReklamId")%>'>
                <img border="0" src="Images/stopicon.jpg" width="16" height="16" />        </a>
                </div></td>
            </tr>
        </table>
    </ItemTemplate>
</asp:Repeater>

Repeatarımın içerisine ise 1 satırlık 4 sütünluk bir tablo oluşturup, hücrelerimize sırasıyla Reklam Adını, Reklam Türünü, Güncelleme iconu ve Silme iconu Koyalım. Bu yapıyı oluşturduktan sonra repeaterımızın görünümü aşağıdaki şekilde olacaktır.



Güncelle ve Sil iconlarınada Link verdik. Silmek için aynı sayfaya ReklamId sini ve islem olarak Sil değerini gönderdik. Güncellemek için ise ReklamGuncelle.aspx sayfasına ReklamId sini gönderdik. Dur bakalım Adem Daha repeatarı doldurmadan neyi siliyosun diyenler vardır heralde :) Haklısınız. Repetarımızı oluşturup şekil şemal verdik şimdide içini dolduralım. Reklamlar.aspx sayfamızın Page_load eventine kodlarımızı yazalım.

//Fonksiyon classımızı çağırıyoruz.
    Fonksiyon system = new Fonksiyon();
 
    string islem, ReklamId;
    protected void Page_Load(object sender, EventArgs e)
    {
        try
        {
            ReklamId = Request.QueryString["ReklamId"].ToString();
            islem = Request.QueryString["islem"].ToString();
            if (islem == "Sil")
            {
                ReklamSil();
            }
        }
        catch
        {
           
        }
        Repeater1.DataSource = system.GetDataTable("Select * from Reklamlar order by Sira");
        Repeater1.DataBind();
    }

Sadece veri çekecektik. Bu islem ve ReklamId neyin nesi :) Yukarıdaki kodları biraz açıklayalım. Fonksiyon classımızı çağırdıktan sonra islem ve ReklamId adında iki değişken tanımladık. Sebebi Yukardaki repeatarda gördüğünüz gibi bir sil iconu koymuştuk. Ve linkine bakarsanız sayfaya islem ve ReklamId değerlerini gönderiyordu. Aşağıda hatırlatalım.

<a href='Reklamlar.aspx?islem=Sil&ReklamId=<%#Eval("ReklamId")%>'>
                <img border="0" src="Images/stopicon.jpg" width="16" height="16" />        </a>

Querystring ile bu değerleri aldıktan sonra eğer islem değişkenimiz "Sil" e eşit ise ReklamSil adında bir metod çağırıyoruz. Onun dışındada en aşağıdaki kodumuz ile Reklamları Repeater kontrolümüze dolduruyoruz. system.GetDataTable  ilginizi çekti sanırım. yukarda fonksiyonumu çağırırken system değişkenine atamıştım. Burdada bu classımın içerisindeki GetDataTable Metodunu çalıştırarak Geriye DataTable dönderiyorum ve repeaterin Datasource sine atıyorum.

        Repeater1.DataSource = system.GetDataTable("Select * from Reklamlar order by Sira");
        Repeater1.DataBind();

Şimdi Sil metodumuzu görelim. Aşağıdaki metodda bu sefer GetDataRow metodunu çağırıyoruz. Buda bize sadece bir kayıt dönderiyor. yani Silinecek Reklamın bilgilerini alıp drReklam datarowuna atıyoruz. FileInfo nesnesi oluşturup reklama ait dosyayı Reklam klasöründen siliyoruz. Hemen ardından system.cmd ile sql sorgusu çalıştırıp, reklam bilgisinide veri tabanından siliyoruz. system.cmd metodumuz kendisine gönderilen sql cümlelerini çalıştıran bir metoddu

    public void ReklamSil()
    {
        DataRow drReklam = system.GetDataRow("Select * from Reklamlar Where ReklamId=" + ReklamId);
        FileInfo fi = new FileInfo(Server.MapPath("..//Reklam//" + drReklam["ReklamYolu"].ToString()));
        fi.Delete();
 
        system.cmd("Delete from Reklamlar Where ReklamId=" + ReklamId);
    }

Reklam Güncelleme sayfası Reklam ekleme sayfasına çok benzediği için burada anlatmıyorum. Insert yerine update yapıcaz sadece :)

Şimdi gelelim Reklamlarımızı sayfamızda çağırmaya. Herhangi bir sayfa açın ve içerisine bir adet Datalist Kontrolü ekleyin. Datalist kontrolümüzün içerisine 1 satırlık 1 sütünluk bir tablo ekliyoruz.  Sayfamızın page_load eventine gelip Datalisti dolduralım. Reklamlar tablosunda Göster hücresi 1 olanları datalistte atadık.

DataList1.DataSource = system.GetDataTable("Select * from Reklamlar Where Goster=1");
DataList1.DataBind();

Datalistimizin içerisine 1 satır 1 sütunluk tablo açmıştık. Bu sütunumuzun içerisine gelip Dataliste yüklenen ReklamId yi ReklamSorgula metodumuza gönderiyoruz

<asp:DataList ID="DataList1" runat="server">
 <ItemTemplate>
      <table class="style1">
          <tr>
              <td>
              <%#Fonksiyon.ReklamSorgula(Eval("ReklamId").ToString())%>
              </td>
          </tr>
      </table>
 </ItemTemplate>
</asp:DataList>

Dataliste yüklenen veriler, yani itemtemplate her döndüğünde reklam flash ise flash, resim ise resim, metin ise metin görünecektir :) Bunu nasıl yaptık.Classımızın içerisindeki ReklamSorgula Metodumuzu biraz açıklayalım.
ReklamId yi aldıktan sonra, o Id ye bağlı Reklam bilgilerini drReklam Datareaderine çektik. Reklamın ReklamTuru hücresi Resim ise Ekrana Resim çıktısı göstermek için html img kontrolü oluşturup reklam dosyasını çağırdık. Aynı işlemleri metin ve flasha da uyguladık. Yani Reklamın türü neyse ilgili değer metodun çağırıldığı yere döndü ve ekrana o yansıdı. Metin ve Resim Reklamların tıklandığı zaman sayfaya gitmesi ve tıklanma hitlerinin artırılması için ReklamYonlen.aspx adında bir sayfaya ReklamId tekrar gönderildi.

public static string ReklamSorgula(string ReklamId)
    {
        string Id = ReklamId;
        string deger = "";
        SqlConnection baglanti = new SqlConnection(@"Data Source=localhost;Initial Catalog=TestPort;Integrated Security=True;");
        baglanti.Open();
        //Metoda gelen ReklamId reklamının bilgilerini çekiyoruz.
        SqlCommand cmdReklam = new SqlCommand("Select * from Reklamlar Where ReklamId=" + Id, baglanti);
        SqlDataReader drReklam = cmdReklam.ExecuteReader();
        if (drReklam.Read())
        {
            if (drReklam["ReklamTuru"].ToString() == "Resim")
            {
                //Eğer Reklamımız Resim ise html ile img kontrolü yazdırıyoruz ve Reklamyonlen sayfasına link veriyoruz.
                deger = "<a href='ReklamYonlen.aspx?ReklamId=" + drReklam["ReklamId"] + "'><img width='" + drReklam["Genislik"].ToString() + "' height='" + drReklam["Yukseklik"].ToString() + "' border='0' alt='" + drReklam["Aciklama"] + "' src='Reklam/" + drReklam["ReklamYolu"].ToString() + "' /></a>";
            }
            if (drReklam["ReklamTuru"].ToString() == "Metin")
            {
                //Eğer reklamımız metin ise Reklam olarak Açıklama satırını çektiriyoruz
                deger = "<a class='normal' href='ReklamYonlen.aspx?ReklamId=" + drReklam["ReklamId"] + "'>" + drReklam["Aciklama"].ToString() + "</a>";
            }
            if (drReklam["ReklamTuru"].ToString() == "Flash")
            {//Eğer reklamımız Flash ise swf yi ekranda göstermek için object kodu ile flashın yolunu çektiriyoruz.
                deger =
                "<object classid=clsid:D27CDB6E-AE6D-11cf-96B8-444553540000 codebase=http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0 width=" + drReklam["Genislik"].ToString() + " height=" + drReklam["Yukseklik"] + ">" +
                "<param name=movie value=Reklam/" + drReklam["ReklamYolu"].ToString() + " />" +
                "<param name=quality value=high />" +
                "<embed src=Reklam/" + drReklam["ReklamYolu"].ToString() + " quality=high pluginspage=http://www.macromedia.com/go/getflashplayer type=application/x-shockwave-flash width=" + drReklam["Genislik"] + " height=" + drReklam["Yukseklik"] + "></embed>" +
                "</object>";
            }
        }
        drReklam.Close();
        cmdReklam.Dispose();
        baglanti.Close();
        //En Son çıkan reklamıda çağırıldığı yere gönderiyoruz.
        return deger;
    }

Şimdi ise reklamımızı yönlendiren ve hitini artıran ReklamYonlen.aspx sayfamızı yapalım. Gerçi birşey yapmamıza gerek yok. Ufak bir kod yazıcaz hepsi bu :) page_load eventine aşağıdaki kodlarını yazın.

    protected void Page_Load(object sender, EventArgs e)
    {
        Fonksiyon system = new Fonksiyon();
        string ReklamId;
        ReklamId = Request.QueryString["ReklamId"].ToString();
 
        system.cmd("Update Reklamlar set Hit=Hit+1 Where ReklamId=" + ReklamId);
        DataRow drReklam = system.GetDataRow("Select * from Reklamlar Where ReklamId=" + ReklamId);
        Response.Redirect(drReklam["Link"].ToString());
    }

Buradada yaptığımız işi kısaca açıklayacak olursak. Reklamlar tablosunda ilgili reklamın hitini bir artırıp. Reklam sayfasına yönlendirme yapıyoruz. Uygulamayı çalıştırıp birkaç reklam ekledim. 2 tane resim reklam 1 flash reklam ve 1 metin reklam ekledim. Gördüğünüz gibi bunları datalistte alt alta göstermiş oldum.