Son zamanlarda sıkça sorulan bir soruda etiket sistemiydi arkadaşlar. Ben de bir yazı hazırliyim dedim (: Blogumda yazdım buraya da eklemek istedim. Umarım öğrenmek isteyen arkadaşların işine yarar.
------
Yazdığımız PHP scriptlerde etiket sistemi artık olmazsa olmaz bölümlerden birisi olmuş durumda. Peki bu etiket sistemini nasıl yaparız ? Bunun için çeşitli yöntemler bulunuyor. Veriyle beraber aynı tabloda etiket sütunu oluşturmak vs. Bu sistem çok hantal oluyor tabi. Daha esnek, daha kullanışlı bir sistemden bahsetmek istiyorum ben. Bu sistemde etiketlerimiz için ayrı bir
etiket tablosu oluşturuyoruz. Bu sistemin önemli bir avantajı bir içeriğe istediğimiz kadar etiket ekleyebilmemiz. Basitçe sistemi anlatim. Öncelikle etiket tablomuzu oluşturuyoruz. Bu tablomuzda
3 alan olacak:
etiket_id, etiket, icerik_id. Burda
icerik_id olarak belirttiğimiz haber ekliyorsak eklediğimiz haberin id’si, başka bir veri giriyorsak o verinin id’si olacak. Yani daha somut bir örnek verecek olursak, bir haber giriyoruz ve bu haberin id’si
185 olsun. Bu habere ekleyeceğimiz etiketler de
loper, etiket sistemi, php olsun. Etiket tablomuz içeriği eklediğimizde şu şekilde şekillenecek.
Etiketi içerik sayfasına çekme işini de tabiki
id ile yapacağız. Örneğin bu son eklediğimiz içeriğin sayfasına girdiğimizde, yani
id’si
185 olan haberin sayfasına girdiğimizde etiket tablosundan
icerik_id’si
185 olan etiketleri çekeceğiz. Sonuç olarak;
loper, etiket sistemi, php etiketlerini çekmiş olacağız.
Peki etiketleri nasıl tek tek ekleyeceğiz. En çok merak edilen, sorulan önemli bir nokta da burasıdır. Aslında çok basittir bu da. Bunun için
explode() fonksiyonundan yararlanacağız. Fonksiyonun verilen texti, belirtilen işaretçiyi dikkate alarak parçalıyor. Yani biz etiket text alanına
“loper, etiket sistemi, php” yazdığımızda, explode fonksiyonumuza da bölmesi gereken işaretin virgül olduğunu belirttiğimizde bu fonksiyon bütün halindeki bu yazıyı virgüllerden kesiyor ve 3 parça haline getiriyor. Bütün iş burada bitiyor. Geriye bu tek halde bulunan etiketleri veritabanımıza yazdırmak kalıyor. Bu yazdırma işlemini de
foreach döngüsü ile yapacağız. Bu döngü etiketi bir dizi değişkenine atıyor ve sırayla bu değişkenleri çekiyor. Kodlama mantığını biraz biliyorsanız bu yapı hiç de yabancı gelmeyecektir size.
$etiket = $_POST['etiket'];
$ayir = explode(',', $etiket);
foreach($ayir as $a)
{
$etiketim = trim($a);
$insertSQL = sprintf("INSERT INTO etiket (etiket, icerik_id) VALUES (%s, %s)", GetSQLValueString($etiketim, "text"), GetSQLValueString($icerik_id, "int"));
mysql_select_db($database_etiketim, $etiketim); $sonuc = mysql_query($insertSQL, $etiketim) or die(mysql_error());
}Kodumuzu kısaca anlatacak olursak önce yazı alanına girdiğimiz etiketi,
etiket değişkenine atıyoruz. Daha sonra
explode ile virgüllerden itibaren yazıyı böl diyoruz. Bunu ayir değişkenine atıyoruz. Burda ayir değişkeni dizi olarak yer alıyor. Daha sonra ise döngü yardımıyla etiketlerimizi tek tek veritabanımıza ekliyoruz. Bu kısımlardan fazla bahsetmiyorum. Zaten php script yazıp da etiket sistemi kısmında takılan birisi için burda mantığı görmek yeterli olacaktır diye düşünüyorum. Gene de aklınıza takılan yerler olursa sorularınızı sorabilirsiniz.
Kaynak :
PHP etiket sistemi yapımı