folder Tahribat.com Forumları
linefolder C#, Asp.Net, .Net Core
linefolder Rasgele Reklam Veya Metin Gösterimi



Rasgele Reklam Veya Metin Gösterimi

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    KopukKopca
    KopukKopca's avatar
    Kayıt Tarihi: 14/Kasım/2007
    Erkek
    Herkese merhabalar ben Recep SELLİ bu makalemizde sizlerle birlikte web sitelerimizde rasgele reklâm veya metin gösterme işlemini inceliyor olacağız. Belirteyim bu makalemizde xml bir alt yapı hazırlayıp bu yapıdan rasgele değerleri web sitelerimizde göstereceğiz ve sayfamız her yenilendiğinde veya açıldığında bu değerler rasgele değişecek. Bu durumda hemen aklınıza .Net içerisinde yer alan Adrotator kontrolünü kullanmak gelebilir.Fakat biz bu kontrolü kullanmadan alt yapısı tamamen bize ait basit bir class (sınıf) tasarlayacağız. Dilerseniz öncelikle xml dosyamızı hazırlamakla işleme başlayalım. Ben Atatürk’e ait sözlerin bir kısmını bu işlem için kullanacağım. Dosyamızın adı Ataturk.xml içeriğine gelince oda aşağıdaki gibi.

    01.<?xml version="1.0" encoding="utf-8" ?>
    02.<ATATURKSOZLERI>
    03.  <ATATURK id=1 Text="Millî ekonominin temeli tarımdır." />
    04.  <ATATURK id=2 Text="Bağımsızlık, uğruna ölmesini bilen toplumların hakkıdır." />
    05.  <ATATURK id=3 Text="Türkiye Cumhuriyeti’nin temeli kültürdür." />
    06.  <ATATURK id=4 Text="Türk dili, dillerin en zenginlerindendir." />
    07.  <ATATURK id=5 Text="Ben Türk gençliğinin spor yaparak güçlü olmasını isterim." />
    08.  <ATATURK id=6 Text="Milletleri kurtaranlar yalnız ve ancak öğretmenlerdir." />
    09.  <ATATURK id=7 Text="Tüketici yaşamak iyi değildir. Üretici olalım." />
    10.  <ATATURK id=8 Text="Ya istiklal, ya ölüm." />
    11.  <ATATURK id=9 Text="Türk, öğün, çalış, güven." />
    12.  <ATATURK id=10 Text="Bilim, gerçeği bilmektir." />
    13.</ATATURKSOZLERI>
    Xml dosyamızı hazırladığımıza göre şimdi sıra xml dosyamız ile bağlantımızı sağlayacak olan class (sınıf)’ımızı tasarlayama geldi.Ben Ataturk adında bir class açıyorum ve xml dosyamız ile bağlantımızı sağlayacak olan metodumu yazmaya başlıyorum bu metodumuz aynı zamanda geriye bir DataSet nesnesi döndürecek. Eklememiz gereken namespacelerimiz System.Data Dataset işlemleri için ve System.IO xml dosyamızı okumak için gerekli olan namespace (input/output).

    Csharp için bağlantımızı sağlayacak ve DataSet döndürecek metodumuz.

    01.public DataSet AtaturkBaglanti()
    02.{
    03.       String path = HttpContext.Current.Server.MapPath(@"App_Data\Ataturk.xml");
    04.       StreamReader xmlStream = new StreamReader(path);
    05.       DataSet ds = new DataSet();
    06.       ds.ReadXml(xmlStream);
    07.       xmlStream.Close();        
    08.       return ds;
    09.}


    Vb.Net için bağlantımızı sağlayacak ve DataSet döndürecek metodumuz.

    1.Public Function AtaturkBaglanti() As DataSet
    2.      Dim path As String = HttpContext.Current.Server.MapPath("App_Data\Ataturk.xml")
    3.      Dim xmlStream As New StreamReader(path)
    4.      Dim ds As New DataSet()
    5.      ds.ReadXml(xmlStream)
    6.      xmlStream.Close()
    7.      Return ds
    8.End Function
    Dilerseniz bu metodumuzda ne yaptığımıza kısaca bir bakalım.Öncelikte dosya yolumuzu belirtmek için String tipinde olan path adlı değişkenimizi tanımlıyoruz ve Server.MapPath metodu ile dosya yolumuzu belirtiyoruz. Hemen ardından xml dosyamızı okumak için xmlStream adındaki nesnemizi oluşturuyoruz.Akabinde bir DataSet nesnesi oluşturuyoruz ve bu DataSet nesnemiz içerisine ReadXml metodu ile okuduğumuz xml veriyi aktarıyoruz.xmlStream nesnemizin kapatıyoruz ve DataSet nesnemizi geri döndürüyoruz. Şimdi sırada dolu olan DataSet nesnemizin satır sayısını alıcak olan metodumuzu yazmaya geldi.

    Csharp için DataSet nesnemizin satır sayısını döndürecek olan metodumuz.

    1.public int AtaturkCount()
    2.{
    3.       DataSet ds = this.AtaturkBaglanti();
    4.       int Count = ds.Tables["Ataturk"].Rows.Count;
    5.       return Count;
    6.}


    Vb.Net için DataSet nesnemizin satır sayısını döndürecek olan metodumuz.

    1.Public Function AtaturkCount() As Integer
    2.       Dim ds As DataSet = Me.AtaturkBaglanti()
    3.       Dim Count As Integer = ds.Tables("Ataturk").Rows.Count
    4.       Return Count
    5.End Function
    Bu metotlarımızda yaptıklarımızı sıralayacak olursak.Öncelikle Bir DataSet nesnesi oluşturuyoruz ve bu DataSet nesnemiz içerisine AtaturkBaglanti adlı metodumuzdan dönen DataSet’imizi aktarıyoruz.Daha sonra Integer tipindeki değişkenimize DataSet’imizin satır sayısını gönderiyor ve bu değişkeni döndürüyoruz. Şimdi sırada rastgele değerimizi üretecek olan metodumuzu yazmaya geldi.Bu metodumuz için Random class’ını kullanacağız böylece her seferinde farklı bir değer elde edeceğiz.Bu metodumuz da geriye Integer tipinde bir değer döndürecek.

    Csharp için Integer tipinde Random değer döndürecek metodumuz.

    1.public int RandomId(int Count)
    2.{
    3.       int maxrand = Count;
    4.       Random rnd = new Random();
    5.       int rndNumber = rnd.Next(1,maxrand);
    6.       return rndNumber;
    7.}


    Vb.Net için Integer tipinde Random değer döndürecek metodumuz.

    1.Public Function RandomId(ByVal Count As Integer) As Integer
    2.       Dim maxrand As Integer = Count
    3.       Dim rnd As New Random()
    4.       Dim rndNumber As Integer = rnd.Next(1, maxrand)
    5.       Return rndNumber
    6.End Function
    Bu metod içinde yaptıklarımıza göz atacak olursak öncelikle bu metodumuzun Integer tipinde bir parametre aldığını görürüz.Bu parametre sizinde tahmin edebileceğiniz gibi bizim DataSet’imizin satır sayısınını referans edecek.Hemen arkasından maxrand adındaki değişkenimizde bu parametreden gelen değeri tutuyor.Daha sonra rastgele bir değer üretmesi için gerekli olan Random sınıfımızdan türettiğimiz rnd adlı nesnemiz yer almakta.Bu nesnemizin hemen altında yer alan rndNumber adlı değişkenimiz rastgele üretilen değeri tutmaktadır.Burada dikkatinizi çekmesi gereken yer sanırım bu satırda bulunan rnd nesnemize ait Next metodunun kullanılıyor olması.Bu metotun yaptığı işlem 1 sayısı ve DataSet nesnemizin satır sayısı arasında bir değeri rndNumber isimli değişkenimize aktarmasıdır. Böylece DataSet nesnemizdeki satır sayısından büyük veya küçük bir değer üretmeyecektir.Buda sayfa her yenilendiğinde veya her açıldığında kesin olarak bir yazının gözükmesini sağlayacaktır. Bu sefer yazacağımız metodumuz ise rasgele üretilen değerde bulan Text’imizi almamızı sağlayacak.

    Csharp için Text’imizi almamızı sağlayacak olan metodumuz.

    01.public void AtaturkRandomText(int RandomId, Label LblAtaturk)
    02.{
    03.       DataSet ds = this.AtaturkBaglanti();
    04.       int Count = 0;
    05.       for (int i = 0; i < ds.Tables["Ataturk"].Rows.Count; i++)
    06.       {
    07.           Count = int.Parse(ds.Tables["Ataturk"].Rows[i]["ID"].ToString());
    08.           if (Count == RandomId)
    09.           {
    10.               LblAtaturk.Text = ds.Tables["Ataturk"].Rows[i]["Text"].ToString();
    11.               break;
    12.           }
    13.           else
    14.           {
    15.           }
    16.        }
    17.}


    Vb.Net için Text’imizi almamızı sağlayacak olan metodumuz.

    01.Public Sub AtaturkRandomText(ByVal RandomId As Integer, ByVal LblAtaturk As Label)
    02.       Dim ds As DataSet = Me.AtaturkBaglanti()
    03.       Dim Count As Integer = 0
    04.       For i As Integer = 0 To ds.Tables("Ataturk").Rows.Count - 1
    05.           Count = Int32.Parse(ds.Tables("Ataturk").Rows(i)("ID").ToString())
    06.           If Count = RandomId Then
    07.               LblAtaturk.Text = ds.Tables("Ataturk").Rows(i)("Text").ToString()
    08.               Return
    09.           End If
    10.       Next
    11.End Sub
    Metodumuz içerisinde yer alan parametrelere bakacak olursak bu parametrelerden RandomId bizim rasgele ürettiğimiz değeri tutacak diğer parametre olan LblAtaturk ise Text’imizi ekranda göstermeye yarayacak. Metodumuza yine AtaturkBaglanti isimli metodumuzu kullanarak başlıyoruz.Count isimli değişkenimiz ise DataSet’imizin o anki satır Id sini tutacak. Bundan sonra bir for döngüsü kuruyoruz bu döngü DataSet nesnemizin satır sayısı kadar dönecek.Döngü içerisinde kurduğumuz bir diğer yapı ise if yapısı bu yapı sayesinde Count isimli değişkenimizin değeri ile RandomId eşit olduğunda DataSet’in o satırında bulunan Text LblAtaturk isimli Label’imiz ile ekrana gösterilecek.Break ve return anahtar sözcükleride koşulumuz sağlandıktan sonra artık bu metotlarda bir işimiz kalmadığı için for döngüsünden çıkışımızı sağlayacaktır. Ben Default.aspx sayfama bir Label kontrolu ekliyorum ve sayfamızın Page_Load metoduna gidiyorum.Artık burada yukarıda yazdığımız metotları kullanma zamanı.

    Csharp için Page_Load isimli metodumuz.

    01.protected void Page_Load(object sender, EventArgs e)
    02.{
    03.       if (!IsPostBack)
    04.       {
    05.           Ataturk Ata = new Ataturk();
    06.           int AtaCount = Ata.AtaturkCount();
    07.           int AtaturkRandomId = Ata.RandomId(AtaCount);
    08.           Ata.AtaturkRandomText(AtaturkRandomId, LblAtaturk);
    09.       }
    10.}


    Vb.Net için Page_Load isimli metodumuz.

    1.Protected Sub Page_Load(ByVal sender As Object,ByVal e As System.EventArgs)Handles Me.Load
    2.       Dim Ata As New Ataturk
    3.       Dim AtaCount As Integer = Ata.AtaturkCount()
    4.       Dim AtaturkRandomId As Integer = Ata.RandomId(AtaCount)
    5.       Ata.AtaturkRandomText(AtaturkRandomId, LblAtaturk)
    6.End Sub
    Evet arkadaşlar artık herşey tamam projemizi çalıştırdığımızda xml dosyamız içerisinde yer alan Atatürk’e ait sözlerden herhangi birisi sizi karşılıyacaktır.Sayfayı yenilediğiniz de veya projeyi sonlandırıp yeniden çalıştırdığınız ise başka bir söz ile karşılaşacaksınız. Bir makalemizin daha sonuna geldik arkadaşlar, ben Recep SELLİ bu makalemizde asp.net projelerimizde rasgele metin göstermesini incelemiş olduk.Sadece xml yapısına değiştirerek web sitelerinizde reklam,metin veya farklı kampanya logolarını hoş bir şekilde gösterebilirsiniz.Herkese bol kodlamalar. 


    2 x pi x re x pi x pi x mi x 7
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    strike
    strike's avatar
    Kayıt Tarihi: 19/Nisan/2008
    Erkek
    hoca c# pageload'da bi hata var gibime geldi ama yanılıo da olabilirim bi kontrol et istersen :|
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    KopukKopca
    KopukKopca's avatar
    Kayıt Tarihi: 14/Kasım/2007
    Erkek
    tam olarak nerede sorun var bi sroun olduğunu sanmıyorum ama :S

    2 x pi x re x pi x pi x mi x 7
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    nurk
    nurk's avatar
    Üstün Hizmet Madalyası
    Kayıt Tarihi: 15/Eylül/2006
    Erkek
    eline sağlık hoca (:

    [22817//kaanabak]
Toplam Hit: 1891 Toplam Mesaj: 4