tags sayfası oluşturma hakkında yardım
Merhaba,
yazılar tablomda yazılara ait bilgileri tutuyorum birde tags diye bir tablom var burda da anahtar kelimeleri ve yazı başlığını tutuyorum.
tags'ların tıklanabilir olması için çalışma yaptım. Hangi anahtar kelimeye tıklanırsa onunla ilgili kaç yazı varsa listeletmeye çalışıyorum.
tags tablosunu keywords sutunu içeriği virgülle ayrılmış şekilde
Örneğin; matematik,formüller,test
link yapım şu: localhost/sitem/tags/matematik
if (!empty($_GET["keywords"])) {
$keywords = $db->filtre($_GET["keywords"]);
sayfayı böyle çekiyorum ve yaziların başlığına göre listeletiyorum.
BİRİNCİ SORUM:
yazilar inner join tags on FIND_IN_SET($keywords,tags.keywords)
Aşağıdaki şekilde de gruplarım diye mantık yürüttüm.
group by tags.keywords
Bu şeklinde kullanmaya çalıştım ama olmuyor find_in_set
yerine başka bir şey mi kullanmalıyım?
İKİNCİ SORUM:
keywords ler sütununa matematik, zor sorular, test
şeklinde "zor sorular" yazıldığı zaman bunun link yapısında nasıl düzgün görünmesini sağlarım?
link yapısı: localhost/sitem/tags/zor sorular
şeklinde olmasın kelime arası boşluk olsa da şuna dönüşsün isterim:
link yapısı: localhost/sitem/tags/zor-sorular
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!
Cevaplar (2)
@ilyasbilgihan,
Her şeyi detaylı açıklamışsın sağol. Çok güzel fikir edindim.
Bu doğrultuda çalışmamı geliştirmeye çalışacağım.
virgülle ayrılmış anahtar kelimeleri slug yapısına çevirme için hazır fonksiyonları inceleyeyim. Dediğiniz gibi bir şey mantıklı duruyor.
Bence taglar için ayrı bir tablo yapma, yazıları tuttuğun tabloda yazılara ait bilgileri tuttuğun sütunların yanına bir de tags
diye bir varchar dizgi sütunu ekle. siteadi.com/tags/deneme-tag
şeklinde dinamik bir adrese istekte bulunulduğunda da SELECT * FROM yazilar WHERE FIND_IN_SET('deneme-tag', tags)
şeklinde sorgu yap ve postları listele.
İkinci soruna gelecek olursak, kullanıcının tag belirlemesine sınırlamalar koyabilirsin, örneğin Prototürk'teki gibi kullanıcını bir listeden belli tagları seçmelerini sağlayabilirsin, ya da girdiği tagı URL friendly bir biçime çevirip öyle sütuna eklersin. Örneğin girilen taglardan bir tanesi Deneme Tag
olsun önce bunu kebab-case
e çevirelim(bir fonksiyon yardımıyla) deneme-tag
şekline dönüştü. Tabloya bu şekilde eklersen URL sıkıntısı da ortadan kalkmış olur.
Kebab-case fonksiyonunu da şu şekilde yapabilirsin. Fonksiyona gelen değere şu işlemleri uygula küçük harflere çevir, Türkçe karakterleri İngilizce karakterlerle değiştir, boşluk yerlerine "-" ekle ve çağrıldığı yere döndür.
Örneğin: "Öğretmenler Günü" > "öğretmenler günü" > "ogretmenler gunu" > "ogretmenler-gunu" şeklinde. Tabi bu çok basit bir fonksiyon. Internette bulacağın fonkisyonlar farklı durumlar için farklı çıktılar verebilir, bu durumları göz önünde bulundurarak daha farklı tablolama işlemleri de yapabilrsin.
Örneğin fonksiyonumuz Test123
> test-123
şekline çevirdi. Fakat aynı fonksiyon test 123
değerini de test-123
e çeviriyor. Burada bu iki tagı da istiyorsak şöyle bir yol izleyebilirsin, kebab-case olarak tutulacakları tagSlugs
diye bir sütuna ekle, normal yazıldıkları gibi tutulacakları da tagSlugs
sütununa ekle. Sorgu işlemlerinde tags sütununu kullanırsın ama herhangi bir tagı kullanıcıya gösterirken tags
sütunundaki aynı index numarasındaki veriyi gösterirsin.
Anlaşılacak üzere, farklı senaryolar için farklı çözümler geliştirmek gerekiyor. Sana en uygun çözüm ve senaryo hangisiyse ona göre geliştirmeye devam etmelisin.
İyi günler, iyi çalışmalar dilerim.