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.
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. public DataSet AtaturkBaglanti()
{
String path = HttpContext.Current.Server.MapPath(@"App_Data\Ataturk.xml");
StreamReader xmlStream = new StreamReader(path);
DataSet ds = new DataSet();
ds.ReadXml(xmlStream);
xmlStream.Close();
return ds;
}
Vb.Net için bağlantımızı sağlayacak ve DataSet döndürecek metodumuz. Public Function AtaturkBaglanti() As DataSet
Dim path As String = HttpContext.Current.Server.MapPath("App_Data\Ataturk.xml")
Dim xmlStream As New StreamReader(path)
Dim ds As New DataSet()
ds.ReadXml(xmlStream)
xmlStream.Close()
Return ds
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. public int AtaturkCount()
{
DataSet ds = this.AtaturkBaglanti();
int Count = ds.Tables["Ataturk"].Rows.Count;
return Count;
}
Vb.Net için DataSet nesnemizin satır sayısını döndürecek olan metodumuz. Public Function AtaturkCount() As Integer
Dim ds As DataSet = Me.AtaturkBaglanti()
Dim Count As Integer = ds.Tables("Ataturk").Rows.Count
Return Count
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. public int RandomId(int Count)
{
int maxrand = Count;
Random rnd = new Random();
int rndNumber = rnd.Next(1,maxrand);
return rndNumber;
}
Vb.Net için Integer tipinde Random değer döndürecek metodumuz. Public Function RandomId(ByVal Count As Integer) As Integer
Dim maxrand As Integer = Count
Dim rnd As New Random()
Dim rndNumber As Integer = rnd.Next(1, maxrand)
Return rndNumber
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. public void AtaturkRandomText(int RandomId, Label LblAtaturk)
{
DataSet ds = this.AtaturkBaglanti();
int Count = 0;
for (int i = 0; i < ds.Tables["Ataturk"].Rows.Count; i++)
{
Count = int.Parse(ds.Tables["Ataturk"].Rows[i]["ID"].ToString());
if (Count == RandomId)
{
LblAtaturk.Text = ds.Tables["Ataturk"].Rows[i]["Text"].ToString();
break;
}
else
{
}
}
}
Vb.Net için Text’imizi almamızı sağlayacak olan metodumuz. Public Sub AtaturkRandomText(ByVal RandomId As Integer, ByVal LblAtaturk As Label)
Dim ds As DataSet = Me.AtaturkBaglanti()
Dim Count As Integer = 0
For i As Integer = 0 To ds.Tables("Ataturk").Rows.Count - 1
Count = Int32.Parse(ds.Tables("Ataturk").Rows(i)("ID").ToString())
If Count = RandomId Then
LblAtaturk.Text = ds.Tables("Ataturk").Rows(i)("Text").ToString()
Return
End If
Next
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. protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Ataturk Ata = new Ataturk();
int AtaCount = Ata.AtaturkCount();
int AtaturkRandomId = Ata.RandomId(AtaCount);
Ata.AtaturkRandomText(AtaturkRandomId, LblAtaturk);
}
}
Vb.Net için Page_Load isimli metodumuz. Protected Sub Page_Load(ByVal sender As Object,ByVal e As System.EventArgs)Handles Me.Load
Dim Ata As New Ataturk
Dim AtaCount As Integer = Ata.AtaturkCount()
Dim AtaturkRandomId As Integer = Ata.RandomId(AtaCount)
Ata.AtaturkRandomText(AtaturkRandomId, LblAtaturk)
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.