Etiket bulutu tasarımıyla ilgili güzel bir yazı. Teşekkürler...
Bu konunun altına etiket bulutu nasıl yapılırı da yazarsak çok daha güzel olur bence. Başka bir konuya yazmıştım ama makaleler arasında bulunursa daha çok kişi faydalanabilir.
Aspogren.net sitesinde bu konu açıklanmış ama site bayadır kapalı.
Makele burda. (Baya zor buldum bu adresi...)
Örnek çalışma da burda.
Benimde ASP blogum var ama etiket sistemini ekleyemedim. Zamanım olmadı ve çok ta karışık geldi... Ama bir ara yapmayı düşünüyorum.
Arkadaşlar Google cache silinirse diye, makalenin orjinalini de buraya yazdım. Kolay gelsin...
ASP ile etiket sistemi yapımı (Kaynak:aspogren.net)
Öncelikle sabırla yazıyı takip etmenizi istiyorum. Çok uzun bir yazı olacağa benziyor. Konu ağır ve bir o kadar da önemli
Bugünlerde artık sitelerde kategorilerin kalktığını, yerini etiket sisteminin aldığını görüyoruz. Peki bu etiket sistemi nedir? Mantığı nedir ve neden kullanılır? gibi sorular çok sorulmuştur. Cevaplayalım. Etiket sistemi kategori sisteminin önüne geçen bir özgürlüktür. Sitemizde yer alan kategoriyi uzatma şansımız yoktur. Ama etiketlerde dilediğimiz cümleleri verebiliriz. Önemi ise, bir çok yazıyı birbirine ilişkilendirerek çağırmasıdır. Ve arama motorları bunları sanki anahtar kelime gibi görebiliyor.
Peki etiket sistemini nasıl hazırlayacağız. Öncelikle işin mantığını, temelini anlamak gerekir. web 2.0'ın inanılmaz gelişmeleri vardır. Bunların başında Etiket sistemi, Starrating vb.. Ama şu anda bizi etiket vurgusu ilgilendirmektedir. Olay çok basit. İyi analiz edilmeli, veritabanı iyi oluşturulmalıdır.
Bu yazımızda algoritma geliştirdiğimiz için herhangi bir oluşum için kod temin etmeyeceğim. Çünkü burada bir döngü, split ve SQL komutları gerekmektedir. İşin mantığını anlayacağım ve kısa kısa kodlar ile bitireceğim yazımı.
Etiket sistemi için veritabanı tasarımı
Öncelikle kategori olayını gözünüzün önüne getirin. 2 tane tablomuz olurdu, birincisi kategorileri tutar, diğerleri ise sitemizin içeriği olan yazıları. Etiket sisteminde de değişen birşey yoktur. Hemen veritabanı modelimizi verelim.
2 adet tablomuz olacak. Öncelikle içerik depomuzu yaratalım;
Tablo Adı : icerik
Alanlar : id (otomatik sayı), baslik (metin / 50), aciklama(not)
Ve etiket depomuzuda yaratalım;
Tablo Adı : etiket
Alanlar : id (otomatik sayı), yazi (sayi), etiket (metin / 100)
Peki veritabanımızı oluşturduk, ya gerisi?
Şimdi yapılacak bir form gerekli (kod vermeyeceğim dedim ama olmayacak gibi). Hemen bir form yaratıyoruz. form alanında 3 eleman gerekli.
1. Başlık
2. Açıklama
3. Etiketler
form.ASP için aşağıdaki kodları kullanınız;
Formumuzu tanıtalım. Başlık ve açıklama alanları bilindiği gibi içeriğimizin başlık ve metin alanı. Etiket kısmı bizi ilgilendiriyor. Şimdi etiketleri virgül ile ayırarak veritabanımızda depolayacağız. Örnek giriş kullanımı şöyle olmalıdır.Kod:<form action="isle.ASP" method="post"> <p>Başlık : <br /><input type="text" name="baslik" /></p> <p>Açıklama : <br /><textarea name="aciklama"></textarea></p> <p>Etiketler : <br /><input type="text" name="etiket" /></p> <p><strong>Not : </strong>Etiketleri virgül ile ayırınız.</p> <input type="submit" value="Kaydet" /> </form>
Örnek : ASP,MySQL,SQL,CSS,XHML,Active server Pages vb...
Buraya kadar olan işlemler basitti. Şimdi zorlu aşamaya geldik. Bunları işlemek ve veritabanına depolamak. Aslında şuanda ASP hakkında bir çok konuyu işlemiş olacağız.
1. Veritabanına kayıt,
2. Veritabanında sorgulama
3. İçerik listeleme
4. Etiket sistemi vb...
isle.ASP için aşağıdaki kodları kullanınız;
Şimdi kodlarımızı parça parça ele alalım. Request.form kısmını açıklamak istemiyorum, artık bu kısmı öğrenmiş olmalısınız. Kodlarımız arasında yer alan trim fonsiyonu kelimelerin başında ve sonunda yer alan gereksiz boşlukları kaldırır.Kod:<% baslik = trim(request.form("baslik")) aciklama = trim(request.form("aciklama")) etiket = trim(request.form("etiket")) If Len(baslik) < 5 or Len(aciklama) < 10 then response.write "Başlık ve açıklama alanlarını doldurun." Else Set ODBC = server.CreateObject("ADODB.Connection") ODBC.Open "Provider = Microsoft.Jet.OLEDB.4.0;Data Source=" & server.MapPath("mdb.mdb") Set kayit = ODBC.Execute("Insert into icerik (baslik,aciklama) values ('"&baslik&"','"&aciklama&"')") set kayit = nothing Set kontrol = ODBC.Execute("Select id from icerik where baslik = '"&baslik&"'") If not kontrol.eof then If isnull(etiket) = false then etiketler = split(etiket, ",") For i = 0 to Ubound(etiketler) Set etiketkayit = ODBC.Execute("Insert into etiket (yazi,etiket) values ('"&kontrol("id")&"','"&trim(etiketler(i))&"')") Set etiketkayit = nothing next End If End If kontrol.close : set kontrol = nothing response.write "Tüm bilgiler kaydedildi" End If %>
Öncelikle verimizi kaydettik, sonra bir sorgulama gerçekleştirdik, kayıt olan id'yi tespit etmek için. Şimdi diyeceksiniz ki aynı veri girilirse ne olacak. Temeli anlattığım için kodları uzatmak istemedim. Verinizi kaydetmeden önce bir sorgu açıp, başlık ile ilişki kurup aynı isimde var mı yok mu diye ilişkilendirmelisiniz. Gelecek konularımızda bu konu üzeirinde uzun uzun duracağız. Kodları büyütüp sizi yormak istemedim.
Son aşama olarak, etiket değişkeninin boş olup olmadığını sınadık (isnull). Eğer boş değilse virgül (,) ile split uyguladık. Ve split uyguladığımızda şöyle bir değer dönecekti;
Örneğin etiketler hanesine şu değerler verilsin; ASP, MySQL, CSS, XHTML
Split ile süzüldüğünde dönecek olan değerleri değişken adımız olan etiketler ile örneklendiriyorum.
etiketler(0) = ASP
etiketler(1) = MySQL
etiketler(2) = CSS
etiketler(3) = XHTML
Daha önce demiştik ya, programlamada ilk değer her zaman sıfırdır diye, bu düzden de for döngümüzü 0 (sıfır)'dan başlattık. Döngümüzde yer alan Ubound(etiketler) söz dizimi, (daha önce bu konuyuda işlemiştik) UBound bir dizide yer alan toplam veri değerini veriyordu. For döngümüzü 0'dan etiketler dizisinin aldığı son değere kadar dönmesini istedik. Ve her değerimizide veritabanımıza yazdırdık.
Şimdi yukarıda etiketler değişkenin alabileceği 4 değeri vermiştim. Kodlarımız arasında yer alan trim(etiketler(i)) ifadesi ise şu anlamdadır. Döngü her döngüğünde i değişkenimiz farklı bir değer alacaktı. 0 - 1 - 2 ... gibi. yani her döngü dönüşünde etiketler değişkeninin o değerdeki karşılığını istedik. Örneğimize göre örneklendirmek gerekirse;
trim(etiketler(2)) değeri CSS değerini verecektir.
Uygulamamızı bitirmiş oluyoruz. Sizle birlikte bende deneyerek tamamladım. Örneğimide çalıştırdım. Ve sizlerin konuyu daha net anlayabilmesi için demo olarak download'a sunacağım.
Ayrıca konuyu uzatmamak için gereken diğer yazılarımı örnek içerisinde tamamladım. Etiketleri yazılar ile nasıl ilişikilendireceğinizi (bilgial.ASP) ve seçilen etikete ait yazıları nasıl bulacağınızı (bilgial.ASP) örnek içinde kodladım. Kodları iyice incelerseniz konuya hakim olacaksınızdır. Elbette ilk denemelerinizde yanılabilirsiniz ama üzerine giderseniz bu konuyu mutlaka öğreneceksinizdir.
Etiket sistemi hakkında hazırlamış olduğum örneği buradan indirebilirsiniz.
Kolay gelsin


Konu Adresi (URL)
About LinkBacks
Alıntı Yaparak Yanıtla

).
