Bir jekcms temasında hangi dosyalar var, her sayfa hangi şablonu yükler ve neden şablon motoru yerine düz PHP kullanıyoruz.
Bir jekcms teması tek bir klasörden oluşuyor ve içindeki dosyaların her birinin belli bir görevi var. Bu yazıda o klasörün içini, sitenin hangi sayfada hangi şablonu yüklediğini ve neden düz PHP şablonlarını seçtiğimizi anlatıyoruz.
Klasörün İçi
Hazır temaların hepsi aynı düzeni kullanıyor. Örnek olarak News temasının klasörü şöyle:
themes/news/
+-- theme.json # temanın adı, sürümü, renkleri ve yazı tipleri
+-- functions.php # temaya özel yardımcı fonksiyonlar
+-- screenshot.png # panelde görünen önizleme
+-- demo-content.php # örnek içerik
+-- templates/ # sayfa şablonları
| +-- header.php, footer.php
| +-- index.php, single.php, page.php, archive.php
| +-- search.php, 404.php, contact.php, legal.php
+-- partials/ # tekrar kullanılan parçalar
| +-- post-card.php, pagination.php, sidebar.php, comments.php
+-- sections/ # düzen editöründe dizilen bölümler
+-- assets/css, assets/js
theme.json temanın kimlik kartı. Paneldeki tema özelleştirici renk ve yazı tipi seçeneklerini bu dosyadan okuyor, yani bir rengin varsayılan değerini değiştirmek için CSS'e dokunmanız gerekmiyor.
Hangi Sayfa Hangi Şablonu Yükler
jekcms'te WordPress'teki gibi uzun bir şablon hiyerarşisi yok. Her sayfa türü tek bir dosyaya gidiyor: yazılar single.php, sayfalar page.php, kategori ve etiket arşivleri archive.php, arama sonuçları search.php ile açılıyor. Bulunamayan adresler için 404.php, yasal metinler için legal.php var. Bir sayfanın neden öyle göründüğünü merak ettiğinizde bakmanız gereken dosya her zaman bellidir.
Parçalar ve Bölümler
partials/ klasöründeki dosyalar birden fazla şablonda kullanılıyor. Yazı kartını değiştirmek isterseniz yalnızca post-card.php dosyasını düzenlersiniz; ana sayfadaki, arşivdeki ve aramadaki kartların hepsi birlikte değişir. Şablonun içinden bir parçayı get_template_part('post-card') ile çağırıyorsunuz. Fonksiyon önce partials/, sonra templates/ klasörüne bakıyor.
sections/ klasörü ise ana sayfa ve kenar çubuğu bloklarını tutuyor: manşet, son yazılar, kategori bölümleri, bülten kutusu gibi. Paneldeki sürükle-bırak düzen editörü bu dosyaları sıralıyor; bir bölümü kapatmak ya da yerini değiştirmek kod gerektirmiyor.
functions.php
Temaya özel yardımcı fonksiyonlar functions.php dosyasında duruyor. News temasında son dakika haberlerini, en çok okunanları ya da bir kategorinin son yazılarını getiren fonksiyonlar burada. Bu fonksiyonlar çekirdeğin get_posts() ve get_categories() fonksiyonlarını kullanıyor; ikisi de nesne değil düz PHP dizisi döndürüyor. Diziler önbelleğe kolay giriyor ve şablonda $post['title'] diye okunuyor.
WordPress'ten gelenler için add_action, do_action ve apply_filters aynı adlarla tanımlı, ama tam bir eklenti kanca sistemi değil. Asıl amaçları, WordPress alışkanlığıyla yazılmış küçük kod parçalarının hata vermemesi. SEO etiketleri, şema ve analiz kodları şablona output_head_scripts() ile basılıyor.
Neden Şablon Motoru Değil
Twig ve Blade gibi şablon motorları şablonları önce PHP'ye derleyip bir önbellek klasörüne yazıyor. Paylaşımlı hostingde bu klasörün izinleri ve eski önbellek dosyaları sık sorun çıkarıyor. Düz PHP şablonlarında böyle bir ara adım yok: dosyayı değiştirdiğiniz anda değişiklik sitede görünüyor ve PHP bilen herkes şablonu okuyabiliyor.
CSS ve JavaScript Dosyaları
Temanın stilleri ve betikleri assets/css/ ve assets/js/ klasörlerinde duruyor. jekcms her dosyanın adresine son değiştirilme zamanını ?v= parametresi olarak ekliyor. Böylece tarayıcı dosyayı uzun süre önbellekte tutabiliyor, siz dosyayı güncellediğinizde ise ziyaretçiler yeni hâlini hemen alıyor.
Tema Geliştirirken
- Yeni bir tema için hazır temalardan birini kopyalayıp başlayın; klasör düzeni ve
theme.jsonalanları hazır gelir. - Tekrar eden HTML'i şablonlara değil
partials/klasörüne koyun. - Ana sayfa bloklarını
sections/klasöründe tutun ki düzen editöründe sıralanabilsin. - Geliştirme sırasında
DEBUG_MODEayarını açın; tanımsız değişken uyarılarını erkenden görürsünüz.