Osman KURT

Yazılım Uzmanı | MVC Eğitmeni

ASP.Net de Flash Animasyonlu Etiket Bulutu

Evet arkadaşlar eminim ki girdiğiniz birçok sitede bu animasyonu görmüşünüzdür. Hazır blog kullanıyorsanız zaten bu eklentiler internette mevcut durumda ufak değişikliklerle kendi sayfanıza entegre edebiliyorsunuz. Ama kendi yapmış olduğunuz bir sayfa varsa ve bu yapıyı kendiniz kurmak istiyorsanız kaynak kod için doğru yerdesiniz. Lafı uzatmadan konuya gelelim :). Arakadaşlar bu işlem için elimizd ebir adet dll miz var öncelikle bu dll dosyasını indirip projenize referans olarak almanız lazım.

http://osmankurt.net/wpcumulus.rar adresinden dll dosyamızı indirebilirsiniz.

Bu dll dosyasını indirdikten sonra projenize sağ tıklayıp reference diyerek dll'i referans olarak projenize ekleyin. Sonra visual studio'nunuzun toolbax kısmına gelin ve sağ tıklayıp choose ıtems seçimini yapın. Gelen pencereden dll mizi bu kısmada yükledikten sonra toolbax penceremize gelen WPCumulus'ı sürükleyip sayfamıza bırakalım ve alt kısımda ki gibi kodlarımızı ayarlayalım.

<cc1:WPCumulus ID="WPCumulus1" runat="server" DataCountField="Count"
        DataTextField="Text" DataUrlField="Link" Width="400" Height="400"
        BackColor="#CCCCCC" HiColor="#66FF33" TagColor1="Red" TagColor2="Blue"  Distr="True"  />

Şimdi cs dosyamıza kod yazmaya başlayalım isterseniz.

Alt Kısım da yazan kodlar animasyonumuzun içeriğini doldurmaya yarayan kodlar siz bunları kendi isteklerinize göre doldurabilirsiniz. İsterseniz dinamik bir yapıya da sokabilirsiniz ve veritabanın dan kontrol edebilirisiniz.

WPCumulus1.DataSource = new[]
                                        {
                                            new {Text = "Osman KURT", Count = 10, Link="/Tags/Silverlight" },
                                            new {Text = "Sadık VAROL", Count = 11, Link="http://iis.net" },
                                            new {Text = "YusufKARAKAŞ  ", Count = 12, Link="/Tags/IE8" },
                                            new {Text = "Cenk KÖKER", Count = 13, Link="/Tags/C#" }
                                         };
WPCumulus1.DataBind();

Not: Türkçe karekterleri desteklememektedir.

Sonraki yazımızda görüşmek üzere;

Osman KURT

ASP.Net de Ping Atmak

Bilgisayarda ping atmak uzman amatör herkesin işine yarayan bir yapıdır. Başlata basılır komut seti açılır gelen siyah ekrana ping www.adres.com yazılır ve gelen değerlerden yola çıkılarak işlemler yapılır. Şimdi ben size bu işlemin c# kodunu yazacağım. Bu kod nerde işimize yarayacak derseniz örnek vermek gerekirse siz hayatın koşuşturmasın da herşeyi unuturken birileri ya bazı programlar sizin yerinize web adresinizin yayında olup olmadığını ya da benzeri şeyleri sizin yerinize takip edebilir. Benim verecğim kod basit bir kod ama siz geliştirebilirsiniz.

Ping ping = new Ping();
PingReply DonenCevap = ping.Send(TextBox1.Text);
if (DonenCevap.Status == IPStatus.Success)
{ 
	Label1.Text += DonenCevap.Address.ToString();     
	Label1.Text += DonenCevap.RoundtripTime.ToString();     
	Label1.Text += DonenCevap.Options.Ttl.ToString();
}
else 
if (DonenCevap.Status == IPStatus.TimedOut) 
{    
	Label1.Text = ("Zaman Aşımına Uğradı."); 
}

Sonraki makalemizde görüşmek üzere;

Osman KURT

ASP.Net de MesajBox Uygulaması

Evet arkadaşlar belkide en çok kullandığımız şeydir bu.

Bir işlem yaptırdıktan sonra kullanıcıya mesaj verdirmek ve işlemi doğruysa sonlandırmak yada yanlışsa tekrar başa almak.

C# da windows form çalışırken bu çok kolay bir olay zaten böyle bir yapı mevcut olduğu için msgbox dediğimizde hemen istediğimiz mesajı verdirebiliyoruz ekranda ama web tarafı o kadar basit değil aslında basit de ama değil :) neyse sözü fazla uzatmadan işleme geçelim isterseniz. Bildiğiniz üzere asp.net de yada html yada başka dillerde ekrana mesaj verdirmek isterken java kodu kullanırız. Bizde yine java kodu yazacağız ama hazırlıyacağımız class'ın içinde yazacağız ki kulllanımı basit olsun ve kod bloğunda kullanılsın.

İlk olarak projemize bir class ekliyoruz ve adını alarmVer olarak belirliyoruz.(İsteğe Bağlı)

Daha sonra alt kısımda yazan kodlarımızı classımızın içine gömüyoruz.

public class alarmVer
{
    /// <summary>
    /// Sadece Js alert methodunu çalıştırır.
    /// </summary>
    public static string msjBox(string kelime)
    {
        kelime = "<script language='JavaScript'>alert('"+ kelime +"');</script>";
        return kelime;
    }

    /// <summary>
    /// Js Alert methodunun yanında virgülden sonra link verebilir ya da geri yazabiliriz
    /// </summary>
    public static string msjBox(string kelime, string link)
    {
        if (link == "geri")
        {
            kelime = "<script language='JavaScript'>alert('" + kelime + "');history.back(-1);</script>";
        }
        else
        {
            kelime = "<script language='JavaScript'>alert('" + kelime + "');window.location = '" + link + "';</script>";
        }
        return kelime;
    }
}

Bu kodlarımızı ekledikten sonra geriye işlem yapacağımız sayfada verdireceğimiz mesaja geldi. İşlemi sonlandırmak için vereceğimiz mesajı kullanıcı ya vereceğimiz kod aşşağıdaki gibidir.

Response.Write(alarmVer.msjBox("İşlem Başarı İle Gerçekleşti.", "gidicek sayfa.aspx"));

Bu kodda ilk kısım mesaj kısmı ikinci kısım ise mesaj kapandıktan sonra kullanıcının yönlendireleceği sayfayı belirler.

Görüşmek dileğiyle;

Osman KURT

Kaynak Classı: alarmVer.cs (1,16 kb)

Dinamik MetaTag Uygulamaları .Net 4.0

Arakadaşlar ezelden beridir yapılan sitelerin bir amacı vardır. Bu amaçlara ulaşmak içinde insanlara ulaşması gerekir.İnsanlarada ilk olarak reklam ve arama motorlarında anahtar kelimeler sayesinde arandığında bulunmakla doğru orantılıdır. Bunun için herşey sitenizin en üst kısmında bulunan kimlik alanı dediğimiz mataTag alanında bulunmak zorundadır. Mantıklı olan dinamik bir yapıya sahip olmak ve her saferinde kod bloğunda kaybolmamak için dinamik bir yapı oluşturulur ve admin paneli dediğimiz veriatabanı yönetim panelinden çok kısa bir sürede bu işlem gerçekleştirilir. Alt kısım da vereceğim kodlar bu işlemi çok güzel bir şekilde yerine getirmektedir. tek yapmanız gereken veritabanın da tablonuzu oluşturmak ve vereceğim kodu sayfanıza yapıştırmak.

Veritabanı alanları:

Title
Keywords
Description

SqlConnection scon = new SqlConnection("server=.;database=dbismi;uId=dbkullanici;pwd=sifre"); 
SqlCommand scom = new SqlCommand("select Title,Keywords,Description from SiteAyarlari", scon); 
if (ConnectionState.Closed == scon.State) 
scon.Open(); SqlDataReader dr = scom.ExecuteReader(); 
while (dr.Read()) 
{
Page.Title = dr["Title"].ToString();
Page.MetaKeywords = dr["Keywords"].ToString(); 
Page.MetaDescription = dr["Description"].ToString(); 
} 
scon.Close();

şeklinde dinamik olarak sayfalarında uygulayabilirsin.

Sonraki makalemizde görüşmek dileğiyle;

Osman KURT

Seo İçin Global.asax ile Sanal yol Oluşturma

Merhaba arkadaşlar;
Bu makalemizde geliştirdiğimiz projelerimizde url adreslerimizi SEO ( search engine optimization ) Türkçe açılım olarak Arama Motoru Optimizasyonu na uyumlu hale getirmenin yollarından biri olan global.asax kaynaklı olarak nasıl yaparız bunu inceleyeceğiz.

Örneğin bir haber sitesinde yüzlerce haber databaseye kaydedilmiş olabilir ve tüm bu haberlerin detaylarının gösterimi için bizim tek bir page miz vardır ( Örnek : Haber-Detay.aspx ) . Klasik olarak bu haberleri göstermek amacıyla tarayıcıda http://domainisimi/Haber-Detay.aspx?HaberId=125 gibi bir Url gösterimi uygularız. Fakat bu durum SEO için çokta ideal bir seçenek değildir. İlgili projenin hedeflenen kelimelerde arama motorlarında üst sıralarda çıkması için arama motorlarının önem verdiği uygulamaları projelerimize yansıtmamız gerekir. Yani tarayıcının adres çubuğuna http://domainisimi/Haber-Detay.aspx?HaberId=125 gibi bir url değilde http://domainisimi/Haber/Haberin-Basligi.aspx ( burada aspx uzantı şart değildir.html veya istenilen herhangi bir kelimede getirilebilir, yada uzantı belirtilmeyebilir.Bu tamamen bizim tercihimize kalmış bir şey ) şeklinde bir url getirebiliyor olmamız lazım. Bunu sağlayabilmek içinse asp.net de birçok yolumuz var ve makalenin başındada belirttiğim gibi bunu global.asax yardımı ile nasıl yapacağımızı inceleyeceğiz.

<a href="/Haber/<%#Eval("HaberId")+"-"+ (Eval("Baslik") %>.aspx" alt=""><%#Eval("Baslik") %></a>

İlgili verileri veri tabanına bağlanarak aldığımızı varsayıyorum.Pagemizde yukarıda belirttiğimiz şekilde bir link verdiğimizde sistem şu şekilde işleyecektir:

Öncelikle projemizde bir Haber klasörü olmadığı halde "haber" kelimesi hedeflenen önemli bir kelime olduğu için her haberde ( projede yüzlerce haberin olduğu varsayılırsa bu demektirki arama motorları bu projede haber kelimesini o sayıda kayda alacak ve bu kelime bu projede yoğunluk kazanacak ) bu kelimeyi vurgulamak için sanal bir klasör oluşturduk. Haberin ID değeri ve son olaraksa eklenen haberin başlığınıda linkimize çektik.

Şimdi burada şu soru sorulabilir. İyide bizim Haber isminde bir klasörümüz ve o başlıkta bir pagemiz yokki ? Sırf biz Url'i bu şekilde yazdık diye istediğimiz olacak değilya !

Elbette sırf page bu komutu yazdık diye sistem bunu bu şekilde algılamayacak. Ama global.asax işte bu noktada imdadımıza yetişecek ve sisteme bizim olmasını istediklerimizi uygulatacak.

Yukarıdaki komutta aslında biz " eğer Haber-Detay.aspx sayfası çağrılırsa sen bunu Haber diye sanal bir klasör oluştur ve daha sonra haberin ID değerini ve başlığını ekleyerek adresi bu şekilde göster" dedik.

GLOBAL.ASAX


//Pagemizin url bilgisini Request.RawUrl ile alarak daha sonraki aşamalarda kullanabilmek adına string bir değer olarak atıyoruz.

string Yol = Request.RawUrl;

//Aldığımız string Url bilgimizin içerisinde Haber diye bir ifadenin geçip geçmediğiniz kontrol ediyoruz. IndexOf ile yapılan aramalarda sonuç bulunmaz ise geriye -1 değerinin döndürür. Dolayısı ile biz kontrolümüzü sonuç -1 den farklı ise şeklinde yapıyoruz.

if (DosyaYolu.IndexOf("/Haber/") != -1)
{

//Uzantımızı aspx olarak belirtmiştik ve buradada uzantımızı kontrol ediyoruz.
if (System.IO.Path.GetExtension(Yol) == ".aspx")

{

string[] path = System.IO.Path.GetFileName(DosyaYolu).Split('-');
//Son olarak bu durumda arka planda çağrılacak olan asıl page mizi ve detaylarının talep edileceği haberi belirtiyoruz..
Context.RewritePath( "/Haber-Detay.aspx", "", "HaberId=" + path[0], true);

}

else
{
//aksi durumda olmasını istediğimiz bir işlem varsa kodlarımızı bu kısımda belirtiyoruz

}

}

Ve uygulamanın sonunda sonuç ?


Her iki durumdada veriler pagemize istediğimiz şekilde geliyor. Tek fark url bilgisinde Sabit bir page ve artı olarakta ID değerlerinin yerine arama motorlarında çıkmayı hedeflediğimiz kelimeleri çekerek sanal sayfalar oluşturmuş oluyoruz.

Tabi bu uygulamada sistem yöneticinizin IIS üzerinden domaininize aspnet_isapi.dll desteğini vermiş olması gerekmekte. Aksi durumda bu uygulama sonuç getirmeyecektir.

Tercih tabiki size kalmış..

Bir sonraki makalede görüşmek dileğiyle;

Osman KURT

ASP.Net ve XML'e Yazma

Konumuz başlıkta yazdığı gibi Asp.Net ile Xml yazdırmak. Elbet bir kaçınız yada çoğunuz asp.net kullanmaktadır ve bu yüzden bu konu işe yarar diye düşündüm. Hele birde netteki örneklerde benim gibi sorun yaşıyorsanız çok işinize yarayabilir.
İlk olaraktan kullanacağımız kütüphaneleri ekliyoruz.

using System.Xml;
using System.Text;

Ve sonrasında depo database imizde bulunan resim tablomuzdan gerekli bilgilerimizi çekip dataXML.xml isimli xml'imize bunları yazdırıyoruz.


OleDbConnection baglan = new OleDbConnection("provider=microsoft.jet.oledb.4.0; data source=" + Server.MapPath("~/App_Data/depo.mdb"));
OleDbCommand komutt = new OleDbCommand("select * from resim", baglan);
baglan.Open();
OleDbDataReader dr = komutt.ExecuteReader();
XmlTextWriter writer = new XmlTextWriter(Server.MapPath("~/dataXML.xml"), Encoding.UTF8);
writer.WriteStartDocument();
writer.WriteStartElement("galerie");
while (dr.Read())
{
writer.WriteStartElement("img thumbEvents=\"true\" thumbnail=\"" + dr["thumbnail"].ToString() + "\" large=\"" + dr["large"].ToString() + "\" description=\"" + dr["description"].ToString() + "\"");
writer.WriteEndElement();
}
writer.WriteEndElement();
writer.WriteEndDocument();
writer.Close();
baglan.Close();


Hepsi bu kadarcık.
Kodları okuyunca zaten neyin ne olduğuda çok açık, herhangi bir sorunu da konu altından benimle paylaşırsanız yardımcı olurum.
Neyse bu işlemlerden sonra dataXML.xml'in son halini görmekte hakkınız
Bende çıkan sonuç şu şekilde;


<?xml version="1.0" encoding="utf-8"?>
<galerie>
<img thumbEvents="true" thumbnail="pictures/thumbnails/21IWuqrpiG201.jpg" large="pictures/large/21IWuqrpiG201.jpg" description="Tanım Denemesi" />
<img thumbEvents="true" thumbnail="pictures/thumbnails/2On1WnAzrE702.jpg" large="pictures/large/2On1WnAzrE702.jpg" description="Tanım Denemesi" />
<img thumbEvents="true" thumbnail="pictures/thumbnails/2aYC2LIeZnP03.jpg" large="pictures/large/2aYC2LIeZnP03.jpg" description="Tanım Denemesi" />
<img thumbEvents="true" thumbnail="pictures/thumbnails/2RIeMrGuSTx04.jpg" large="pictures/large/2RIeMrGuSTx04.jpg" description="Tanım Denemesi" />
<img thumbEvents="true" thumbnail="pictures/thumbnails/2VUXUnMgIBn05.jpg" large="pictures/large/2VUXUnMgIBn05.jpg" description="Tanım Denemesi" />
<img thumbEvents="true" thumbnail="pictures/thumbnails/2Sus3UmfNg606.jpg" large="pictures/large/2Sus3UmfNg606.jpg" description="Tanım Denemesi" />
<img thumbEvents="true" thumbnail="pictures/thumbnails/2l6ZE7VOXNQ07.jpg" large="pictures/large/2l6ZE7VOXNQ07.jpg" description="Tanım Denemesi" />
<img thumbEvents="true" thumbnail="pictures/thumbnails/2bPtHCu5syf08.jpg" large="pictures/large/2bPtHCu5syf08.jpg" description="Tanım Denemesi" />
<img thumbEvents="true" thumbnail="pictures/thumbnails/2PGSJwPgaRs09.jpg" large="pictures/large/2PGSJwPgaRs09.jpg" description="Tanım Denemesi" />
<img thumbEvents="true" thumbnail="pictures/thumbnails/2siQCksaJFT10.jpg" large="pictures/large/2siQCksaJFT10.jpg" description="Tanım Denemesi" />
</galerie>

Buraya kadar eksiksiz bir şekilde yazarsanız benimle aynı sonucu alacağınızı düşünüyorum.

Görüşmek Üzere;

Osman KURT

Asp.Net ve URL İşlemleri

Arakadaşlar geçen gün çalıştığım firmada ki çok sevdiğim bir abim kendisinin yöneticisi olduğu bir web sayfasına ait tam 4000 (dort bin) adet sub domain açıcağını söyledi. E tabi sizde takdir edersiniz ki 4000 tane sub domaini açmak her babayiğidin harcı değil yani :). Sağolsun kendisi yardıma bizi layık görmüş bu konu hakkında fikir üretmiş bunların yapılabilirliğini ve yapabilirmiyim diye bana geldi. Bende düşündükleri derya deniz olan bu abimin bazı isteklerinin (baya fazla) yapılabileceğini ve yapabileceğimi söyledim. Tabi kendi işimi aksatmadan :)

Neyse işe ilk olarak bir kolay portal oluşturarak başladım. Sonra bu sub domainlerin google da ilk sıraları zorlaması için portal içine dinamik bir met tag yönetimi yaptım. Bu dinamik meta tag yönetiminin kodlarınıda başka bir yazıda paylaşıcam elbet sizinle. Daha sonra anasayfa kısmında başka bir arkadaşımında yardımıyla asıl web sayfasının veritabanına bağlanarak ordan random bir şekilde 20 adet ürün çektim. Asıl önemli kısım bunları yaparken en kolay en basit ve en kısa zaman da yapmaktı bunun içinde oluşturduğumuz portalın image dosyalarından tutun da css dosyasına kadar olan bütün dosyalarını ana dizinde tuttuk yani açtığımız bütün sub domainler aynı yerden image dosyalarını ve css doayalarını çekiyor. Buda bize çok fazla zaman kazandırdı. Bu olayı yaparken yazılımcı olduğum için bişeyler ürettiğim için gerçekten mutl oldum. Yazılımın tadına vardım. Normalde yaptıığım şey çok küçük bişey ama ortaya bişey koymak gerçekten küçükte olsa bir yazılımcıyı mutlu edebiliyormuş.

Gelelim asıl konuya benim takıldığım bir nokta url yönetimiydi.O da nasıl bişey, açtığımız her subdomainin ismi yaptığımız sitelerde bize lazım olacaktı, metatag'larda kullanmak için. İnternette baya bişey araştırdım. Sonunda buldum. Meğer neler varmış ya :). Şimdi bu bulduğum kod parçacıklarından bazılarını sinle paylaşmak istedim. Çünkü benim dışında sizinde işinize yarayacağına inanıyorum.

Bu işlemlerden bazıları;
 
//root dizini verir.
Response.Write("root dizin : " + HttpContext.Current.Request.Url.Host.ToString());
//sonraki dizinler
Response.Write("sonraki dizin : " + HttpContext.Current.Request.Url.AbsolutePath.ToString());
//Full adres satırı
Response.Write("Full adres : " + HttpContext.Current.Request.Url.AbsoluteUri.ToString());
//Portlu Full adres satırı
Response.Write("Portlu Full adres : " + HttpContext.Current.Request.Url.OriginalString.ToString());
//Portu
Response.Write("Portu : " + HttpContext.Current.Request.Url.Port.ToString());
//Query
Response.Write("Query :" + HttpContext.Current.Request.Url.Query.ToString());
//http
Response.Write("http : " + HttpContext.Current.Request.Url.Scheme.ToString());
QueryString almak için aynı zamanda Request.QueryString["id"] şeklinde bir kullanımda gerçekleştirebiliriz.

Osman KURT
Yazılım Uzmanı

ASP.Net de Veri Kaydı

Evet arkadaşlar bu yazımızda asp.net de veri kaydı yapmayı öğreneceğiz.

İlk olarak Default.aspx sayfamıza 1 adet textbox ve 1 adet buton ekliyoruz. Sayfamıza eklediğimiz bu textbox dan veri tabanımıza isim kaydı yapacağız. Sayfamıza textbox ve butonumuzu ekledikten sonra veri kaydı yapacağımız database'imizi tasarlıyoruz.

Veri tabanımızı alt kısımda bulunan resim gibi tasarlıyoruz ve veri tabanı adı olarak ta db.mdb ismini veriyoruz. 

Şimdi ise işin kod kısmını yazalım; Default.aspx sayfamıza eklediğimiz butonun üzerine gelerek çift tıklıyoruz ve kod bloğunu açıyoruz.

 

OleDbConnection cnn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\db.mdb;Mode=ReadWrite;Persist Security Info=False");      

OleDbCommand cmd = new OleDbCommand("insert into isim (ad) values ('" + TextBox1.Text + "') ", cnn);

cnn.Open();

cmd.ExecuteNonQuery();

cnn.Close();

Bu kodu sayfamıza direk kopyaladığımız da yada yazdığımızda çalışmayacak ve hata verecektir. Bu hatayı engellemek ve kodlarımızın çalışmasını sağlamak için kod bloğumuzun en üst kısmında bulunan kütüphane kısımlarına;

Using System.Data.OleDb;

Kodunu ekliyoruz. Bu kodu ekledikten sonra sayfamız sorunsuz bir şekilde çalışacaktır

Saygılarımla;

Osman KURT