Üye : superseloİçerik etiket ekleme sistemi nasıl çalışıyor. Yani tek bir textbox tan verileri virgülle (yada boşlukla) nasıl ayırıp veritabanına nasıl ekliyoruz.
İçerik ekleme formundan ayrı bir etiket formumu yapıyoruz?
Üye : mfyzVeritabanına da öyle, yani virgüllerle kaydediyorsun.
Asıl olay arama ve ilişkili konuları süzgeçleme gibi kısımlarda kullandığın SQL veya algoritmik methodlarla bir konunun bulunduğu anahtar kelime (etiket)lere uygun benzer içerikleri, ya da aramada o anahtar kelimelere göre skorlama mekanizmasını iyi oturtmaktan geçiyor.
Mesela şu an mfyz'de böyle tam kurgulu bir yapı yok, muhtemelen yeni sürümde bunu gözden geçirip "related posts" kıvamında birşeyler yapacağım.
Üye : superseloO zaman etiket verilerini çekerken explode ile ayırıyoruz değil mi?
En çok merak ettiğim konuda ilişkili konuları süzgeçlemeydi zaten. Yani iki ayrı konuda aynı etiket varsa nasıl olacak? Bunları nasıl bağlayacağız birbirine?
Şu konudaki sorularımı bi türlü toparlayamıyorum ya![]()
Üye : mfyzo noktada değişik algoritmalar var. Mesela google metin içindeki tekrar eden kelime sayısına göre bir anahtar kelime skorlaması fln yapıyor.
Ama burada yapılabilecek mantıklı şey anahtar kelimelerin sıralamasına dikkat etmek olabilir.
Tabi çapraz eşleme yaparak ilişkili konu bulmaya çalışmak daha doğru olacaktır ama şu an bu konuda bildiğim bir algoritma yok. Hiç uygulama fırsatım olmadığı için geliştirmeye çalışmadım ama birkaç saatlik çalışma ile mantıklı ve hızlı çalışan SQL yapısı oluşturulabilir bununla ilgili.
Etiket sistemi icin bir tablo olusturuyorsun
tag_id | tag_text | blog_id
Sonra sen bir inputa
blog,test, hello, world
vs yazicaksin,
Kendi yazdigim tag sinifindan bir method gosterecegim bu method virgulle ayirip sagindaki, solundaki boslugu silip ekliyor..
<?php
public function addTagsByBlogId($blogid, $tags)
{
if(empty($blogid) || empty($tags)) return;
// clean before and behind of input $tags
$tags = trim($tags);
$tagsExplode = explode(',', $tags);
$tagsCount = count($tagsExplode);
for($i=0;$i<=$tagsCount; $i++)
{
// The spaces before en after the tag clean
$tag = trim($tagsExplode[$i]);
$qAddTag = "INSERT INTO tags(tag_text, blog_id) ".
"VALUES('".$tag."', '".$blogid."')";
mysql_query($qAddTag);
}
}
Üye : alone123Etiket sistemi derken meta keywords den bahsediyorsunuz değil mi ?
Ben bunun için ekstradan bir tablo veya herhangi bir veritabanı işlemi uygulamıyorum.Keywords olarak forumumda konu başlığını tamamen alıyorum , str_replace ile virgüllere ayırarak alıyorum ve tüm metnin (yazının) boşluklarını virgüle çeviriyorum ; onları alıyorum.Yani 3 tane değişkenim var : $meta1 $meta2 $meta3
Sonra da bunları <meta keydords herneyse onun içine yazdırıyorum : )
Veritabanında yazıların bulunduğu bolume bir kolon daha olustur adı "etiket" olsun
Daha sonra veritabanına veri işlerken etiketler tablosunuda query'e ekle
eklerken aralarına virgül (,) koyarak ekle normal bir şekilde
örnek: etiket,bulut,ruzgar vs. gibi
daha sonra bu kolandan verileri çekerken
<?
$cek=mysql_query("SELECT * FROM TABLOADI WHERE yazi_id='yazi_id'");
$row=mysql_fetch_array($cek);
$parcala=explode(",",$row['etiket']);
?>
<a href="arama.php?kelime=<?=$parcala[1];?>"><?=$parcala[1];?></a>
Hepsi bu kadar
Pardon orada bir yanlışlık yapmışım while döngüsü kullanman gerekiyor bunun için son hali şu şekilde olmalı
<?
$cek=mysql_query("SELECT * FROM TABLOADI WHERE yazi_id='yazi_id'");
while($row=mysql_fetch_array($cek)){
$parcala=explode(",",$row['etiket']);
?>
<a href="arama.php?kelime=<?=$parcala[1];?>"><?=$parcala[1];?></a>
<? } ?>
Üye : alone123Hatalı kodlama ! Bir sayfada birden fazla <? ve ?> kullanmak sayfayı yavaşlatır.
echo "<a href='arama.php?kelime=parcala[1]'>$parcala[1]</a>";
kullanman yeterli.Üstelik dediğim gibi veritabanında bir işlem yağacağına etiketleri yazının ilk 50 harfinden vs. çek veritabanında yer kaplamasın.
Üye : mfyz@alone123, bu hatalı kodlama değildir, optimist olmayan kodlamadır. Hatalı olması durumu çok farklı bir konudur.
Evet söylediğin doğru, fakat sayfa optimizasyonu konusunda php etiketleri veya html+php entegrasyonundaki bu syntax düzeninden önce mysql optimizasyonu, döngüler, recursive çalışan fonksiyonlar ve çalışan extension çağrıları (mysql soket, gd vs) azaltılması gibi daha önemli faktörler vardır.
Yoksa php bloklarının htlm içine böyle gömülmesi en fazla milisaniyeler kaybettirir. Çok dah önemli bir konu değildir bana kalırsa. Uygulama çatısı iyi optimize edildikten sonra bu tarz kodlamanın zararı yoktur.