v2.5.1
Giriş yap

tags sayfası oluşturma hakkında yardım

rephp7
88 defa görüntülendi

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

Cevap yaz
Cevaplar (2)
rephp7
59 gün önce

@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.

ilyasbilgihan
59 gün önce

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.