Çok dilli kurumsal web siteleri için Sulu CMS 3
Birden fazla dilde yayımlanan bir kurumsal web sitesi, yalnızca çevrilmiş bir sayfadan ibaret değildir. Her dilin kendi adreslerine, aynı içerik yapı taşlarına ve her değişiklikte üç ayrı yerde arama yapmayı gerektirmeyen bir editör düzenine ihtiyacı vardır. Bu tür web sitelerini, Symfony tabanlı bir içerik yönetim sistemi olan Sulu ile geliştiriyoruz. Bu web sitesi de bunun bir örneğidir: Almanca, İngilizce ve Türkçe olarak Sulu 3 üzerinde çalışır.
Neden Sulu?
Sulu, eksiksiz bir Symfony projesidir. Sayfa yönetiminin ötesine geçen her şeyi – doğrulamalı bir iletişim formu, özel bir controller, bir CRM bağlantısı – iyi tanıdığımız bir çatı içinde, test ve statik analiz için aynı araçlarla yazıyoruz. Önce öğrenilmesi gereken ayrı bir eklenti dünyası yoktur; içerik yönetim sistemi ile uygulama arasında da bir kopukluk olmaz.
Aynı zamanda Sulu, çok dilli içeriği baştan itibaren tanıyan bir editör arayüzüyle gelir. Bir sayfa bir kez vardır ve her dil için kendi sürümüne sahiptir.
Diller ve adresler
Dilleri webspace yapılandırmasında belirliyoruz. Almanca varsayılan dildir ve önek almaz; İngilizce ve Türkçe ise /en ile /tr önekini alır. Daha önemlisi, her dilin kendine ait, okunabilir adresleri vardır: /leistungen, /en/services ve /tr/hizmetler aynı sayfadır. Böylece arama motorları her dilde gerçekten aranan terimleri bulur, ziyaretçiler de okuyabildikleri adresler görür.
Sulu 3’te ilgili alan türünün adı route’tur. Sulu 2’den gelenler bunu resource_locator olarak tanır – eski şablonların uyarlanması gereken noktalardan biri de budur.
Sözleşme olarak şablonlar
Sulu, sayfa şablonlarını XML ile tanımlar. Bir şablonun her özelliği Twig şablonunda aynı adla kullanılabilir. Risk de tam burada yatar: Biri bir tarafta bir alanın adını değiştirirse, diğer taraf sessizce bozulur.
Bu yüzden hangi alanların bulunduğunu, türlerini ve ön yüzün bunları nasıl gösterdiğini bir özellik sözleşmesinde (property contract) kayıt altına alıyoruz. Arka uç, ön yüz ve içerik bu belgeye göre çalışır; ad değişiklikleri yalnızca birlikte yapılır.
Özel sayfalar yerine yapı taşları
- Blok kütüphanesi: Metin, kutucuklar, listeler, temel rakamlar, süreç adımları, SSS ve her sayfada birleştirilebilen diğer bloklar. Her blok renk, boşluk ve hizalama için aynı ayarlara sahiptir.
- Snippet’ler: Üst ve alt alan her dil için bir kez düzenlenir ve her yerde kullanılır.
- Özet (excerpt): Önizlemeler için başlık, kısa açıklama ve simge, Sulu’nun özet verilerinden gelir. Listeler ve menüler için ek alan gerekmez.
Kod olarak içerik
Bir web sitesi yayına alınırken sayfa ağacını, metinleri, hukuki metinleri, SEO bilgilerini ve blog yazılarını yönetim panelinde elle oluşturmuyoruz. Bunlar projede veri olarak durur ve bir konsol komutuyla aktarılır. Bunun birçok faydası vardır: Üç dilin de aynı yapıya sahip olduğu kanıtlanabilir, otomatik testler eksiksizliği ve meta bilgilerin uzunluğunu denetler, bir düzeltme de her ortama kodla aynı yoldan ulaşır. Sonrasında içerik ekibi yönetim panelinde işi devralır.
Blog ve arama
Sulu, blog yazılarını kendi şablonuna sahip makaleler olarak yönetir. Genel bakış sayfası, özel bir controller kullanan sıradan bir sayfadır.
Arama, Loupe bağdaştırıcısıyla SEAL üzerinden çalışır. Dizin, sunucuda dosya olarak saklanır. İşletilmesi ya da ücret ödenmesi gereken ek bir arama hizmeti yoktur ve hiçbir arama sorgusu sunucudan dışarı çıkmaz.
Ön yüz ve işletim
Çıktı Twig ile üretilir. Stiller için Vite ile derlenen Tailwind CSS 4 kullanıyoruz. Tailwind, sınıf adlarını bulmak için şablonları tarar; bu nedenle her şablon değişikliğinden sonra yeni bir derleme gerekir. Yazı tiplerini kendimiz sunuyoruz, böylece yabancı sunuculara hiçbir istek gitmez.
Bilinmesi gereken birkaç özellik var:
- Üç konsol. Sulu; yönetim, web sitesi ve genel amaçlı olmak üzere üç ayrı çekirdek kullanır. Veritabanı geçişleri yönetim konsolu üzerinden çalışır; yönetim ve web sitesi önbellekleri ayrı ayrı temizlenmelidir.
- MariaDB, MySQL değildir. Veritabanı bağlantısında MariaDB sürümü belirtilmelidir. Aksi hâlde Doctrine, MariaDB’nin reddettiği SQL üretir.
- Yapılandırma önbelleğe alınır. Webspace ya da şablonlarda değişiklik yaptıktan sonra her iki önbellek de temizlenmelidir.
Yayına alma işlemi Deployer ile yapılır. İçeriklerin aktarılması ise bilinçli olarak başlatılan ayrı bir adımdır.
Kimler için değer?
Sulu; birden fazla dili olan, bir ekip tarafından düzenli olarak güncellenen ve ileride özel işlevlerle büyümesi beklenen web siteleri için özellikle uygundur. Kimsenin güncellemediği basit bir tanıtım sitesi için emek çoğu zaman fazla gelir. Sınırın nerede olduğunu sizinle birlikte belirliyoruz.