XOOPS hakkında internette pek fazla rastlamayacağınız bir perspektif sunmak istiyorum: modül şablon override mekanizmasının mantığı ve bu sistemin neden aslında çoğu modern CMS'ten farklı ve özel bir yaklaşım sunduğu.
Çoğu CMS'te "çekirdek" sistem -kullanıcı yönetimi, menüler, temel sayfalar- kullanıcıların sık sık müdahale ettiği bir yapıdır. XOOPS'te ise farklı bir yaklaşım vardır: XOOPS çekirdeği aslında bir "temel modül" olarak görülebilir. Bu, çok önemli bir paradigma farkıdır.
XOOPS'te "modüller" sadeer basit eklentiler değildir. "Plug-in'lere benzer şekilde çalışırlar, ancak çok daha güçlüdürler". Güçlü olmalarının nedeni ise şudur: Her modül, kendi veritabanı tablolarını, kendi mantıksal katmanını ve kendi şablon sistemini barındırabilir.
Konuyu anlamak için önce XOOPS'te "tema" ile "şablon" arasındaki çok kritik farkı anlamak gerekir:
Tema (Theme): Tüm XOOPS sitesinin genel stilini, blok düzenini ve dış kabuğunu belirler. Temanın CSS'i tüm modüllere uygulanır.
Şablon (Template): Belirli bir modülün bir sayfasının veya bir bloğun iç düzenini belirler. Her modülün kendi şablon dosyaları vardır.
Şimdi gelelim "bilinmeyen" kısma: XOOPS temaları neden bu kadar küçük boyutlu olabilir? Cevap: Çünkü XOOPS teması sadece "kutu" görevi görür. Kutunun içindeki her bir modülün nasıl görüneceğine, o modülün kendi şablonları karar verir. Bu sayede aynı temayı kullanırken, modül bazında tamamen farklı iç düzenler oluşturabilirsiniz.
Şimdi internette çok az kaynakta bahsedilen ama XOOPS'i gerçekten güçlü kılan mekanizmaya gelelim: Şablon Override (Geçersiz Kılma).
Modül şablon override mekanizması şu şekilde çalışır:
Bir modülün şablon dosyası /modules/MODULE_ADI/templates/ klasöründe bulunur.
Bu şablonu değiştirmek isterseniz, orijinal modül dosyasını kurcalamadan, kopyasını /themes/SİZİN_TEMA_ADINIZ/modules/MODULE_ADI/ klasörüne koyarsınız.
XOOPS, önce tema klasörünü kontrol eder; eğer override edilmiş şablonu bulursa onu kullanır, bulamazsa modülün kendi şablonuna döner.
Bu mekanizmanın önemi şuradadır: Modül güncellendiğinde, yaptığınız tüm şablon değişiklikleri kaybolmaz. Override klasöründe durdukları için, güncelleme sırasında üzerine yazılmazlar. Bu, çoğu modern CMS'te bile tam olarak bu kadar temiz çözülmemiş bir sorundur.
Diyelim ki XoopsSlideshow modülünün çıktısını tamamen kendi tasarımınıza göre düzenlemek istiyorsunuz. Normalde modülün şablon dosyasını doğrudan editlemek risklidir. XOOPS'te ise yapmanız gereken:
dosyasını alıp
/themes/sizin_temaniz/modules/xoopsslideshow/slideshow_index.html konumuna kopyalamak
Ardından bu kopyayı dilediğiniz gibi değiştirebilirsiniz. Modül güncellemesi geldiğinde, orijinal dosya değişse bile sizin override dosyanız dokunulmadan kalır.
Bu mekanizmanın yeterince bilinmemesinin birkaç nedeni var:
XOOPS 2.x'in yapısı: Bu override sistemi XOOPS 2.x döneminde olgunlaştı, ancak o dönemde İngilizce dışındaki dokümantasyon çok sınırlıydı.
Tema ve şablon karışıklığı: Çoğu kullanıcı tema ile şablon arasındaki farkı tam anlamadığı için, modüllerin görünümünü doğrudan tema CSS'i ile halletmeye çalışır ve başarısız olur.
Modern CMS trendleri: WordPress ve benzeri sistemlerin "her şey tema içinde" yaklaşımı yaygınlaştıkça, XOOPS'in "modül merkezli" yaklaşımı arka planda kaldı.
XOOPS'in modül override mekanizması, günümüzün component-based frontend framework'leri (React, Vue) ile çalışırken aslında çok modern bir yaklaşım sunuyor: Her modül kendi bileşenidir ve tema sadece bir layout kabuğudur.
Birçok modern CMS bu ayrımı ancak son yıllarda tam olarak oturtabildi. XOOPS ise yıllar önce bu felsefeyi benimsemiş durumda.
Özetle: XOOPS'i diğer CMS'lerden ayıran -ve çoğu kaynakta atlanan- en önemli özelliği, tema ile şablon arasındaki keskin ayrım ve modül şablonlarını güncellemelerden bağımsız olarak override edebilme yeteneğidir. Bu, geliştiriciye hem esneklik hem de güvenlik sağlayan bir sistemdir.