Temayı paketlemek ve yayınlamak
Paketlemek
Tema, klasör adı tema adı olan bir zip olarak paketlenir. Zip'in kökünde tema klasörü bulunur:
ornek-tema-1.0.0.zip
└── ornek-tema/
├── theme.json
├── screenshot.png
└── Resources/
├── views/layout.html.twig
└── dist/style.css
Pakete girmemesi gerekenler: kendi kaynak dosyalarınız (src/, node_modules/), .git, derleme yapılandırmaları. Pakette olmaması gerekenler değil, olamayacaklar: .php, .phtml, .phar dosyaları, .htaccess, .user.ini, web.config ve cp-core/ ya da cp-includes/ yolları. Bunlardan biri varsa paket reddedilir.
Sözleşme denetimi
Kurulumdan önce paket otomatik denetlenir (ayrıntı: Tema sözleşmesi). Sık karşılaşılan red nedenleri ve çözümleri:
| Mesaj | Çözüm |
|---|---|
| Theme directory name must be kebab-case | Dizin adını ornek-tema biçimine çevirin (küçük harf, tire) |
| theme.json is missing or invalid | Dosya yok ya da JSON bozuk; bir JSON doğrulayıcıyla bakın |
| theme.json is missing a "name" / "version" field | Alanı ekleyin; sürüm 0.0.0 olamaz |
| Missing Resources/views/layout.html.twig | Ana şablonu ekleyin |
| theme.json entry file "…" does not exist under Resources/ | entry.css/entry.js yolu Resources/ altına göre yazılır; dosya var mı |
| Package must not include server-side code or server config | .php, .htaccess vb. dosyaları paketten çıkarın |
| Package must not include core paths | Pakette cp-core/ ya da cp-includes/ var |
| … must not declare namespace App\ | Tema PHP içeremez; dosyayı kaldırın |
Ayrıca şablonlar kaydedilirken sözdizimi denetimi yapılır (ThemeSourceLinter): bozuk bir Twig dosyası kaydedilmeden önce uyarı verir (onayla yine de kaydedilebilir).
Kurulum yolları
- Zip yükleme: AACP → Görünüm → Tema ekle → zip seçin. Aynı adlı tema varsa üzerine yazma onayı sorulur. Kurulum yalnızca
cp-content/themes/altına yazar, çekirdeğe asla dokunmaz. - Mağaza: AACP → Modüller → Modül mağazası (temalar için Görünüm → Tema mağazası) imzalı kataloğundan görselle bakıp kurun.
- Elle: klasörü
cp-content/themes/altına kopyalayın. AACP tema listesinde görünür.
Kurduktan sonra AACP → Görünüm → Tema listesi'nden etkinleştirin. Etkinleştirme Twig yollarını yeniden kurduğu için önbelleği yeniler; birkaç saniye sürebilir.
Çalışma anında dayanıklılık
- Bozuk bir
theme.jsontemayı listeden düşürür, diğerlerini etkilemez. - Etkin tema ayarı geçersizse sistem yedek temaya (
cpalius-website) düşer; hata sayfaları veritabanı çökükken bile yedek temayla çizilir. - Şablon hatası, yanıt katmanında diğer her hata gibi yakalanır; tüm siteyi çökertmez.
Mağazaya ve katalogta yayın
Mağaza, imzalı bir katalog (extensions/index.json + index.sig) sunar: her paketin sürümü, SHA-256 özeti ve ekran görüntüsü katalogdadır. İndirilen paket açılmadan önce özet doğrulanır; katalog imzası, süre sonu ve düşmeyen seri numarasıyla denetlenir. Böylece katalogu ele geçiren biri eski, zafiyetli bir sürümü yeni gibi sunamaz.
Üçüncü taraf geliştiriciler için mağazaya doğrudan yayın akışı henüz açık değildir (yol haritasındadır). O zamana kadar temanızı zip olarak doğrudan müşterilerinize dağıtabilir ya da yayın için CPalius ekibiyle iletişime geçebilirsiniz.
Sürümleme ve uyumluluk
theme.jsonsürümüMAJOR.MINOR.PATCHolmalıdır.- Bir şablonu geçersiz kıldığınızda, modülün şablon değişkenleri ya da blok adları değişirse temanız bozulur. Modül ya da çekirdek sürüm notlarında "tema yazarlarını ilgilendirir" notlarını izleyin.
- Varsayılan temadaki şablonları kopyalayıp değiştirmek en kırılgan yoldur: varsayılan tema değişince farkı elle taşımanız gerekir. Mümkün olduğunca az şablon geçersiz kılın (Githeme yalnızca üç dosyayı geçersiz kılar ve geri kalanını varsayılandan alır).
Tema geliştirme kontrol listesi
Yapı
- Dizin adı kebab-case;
theme.jsonname,version,entrydolu -
screenshot.pngvar (mağaza ve tema listesi görseli) - Pakette
.php,.htaccess,cp-core/yok
Şablon
-
layout.html.twigtitle,meta_description,meta_robots,stylesheets,content,javascriptsbloklarını tanımlıyor -
theme.head.endvetheme.footer.beforekancaları var - Ön yüzde
cp_user(),cp_is_granted(),cp_flashes()kullanılıyor (app.userdeğil) - Kullanıcı verisi kaçışlı;
|rawyalnızca temizlenmiş içerikte - Satır içi betik/stil nonce taşıyor
Özellikler
- Menü konumları
theme.json'da bildirilmiş ve şablonda çiziliyor - Widget alanları
cp_widget_areaile çiziliyor - Renkler
--cp-*değişkenlerini kullanıyor (yöneticinin renk seçimi çalışsın) -
cp_font_stylesheet()temanın CSS'inden sonra bağlanmış - Çerez onayı:
cp_consent_mode()vecp_cookie_consent() - Dil değiştirici ve
cp_hreflang_links() - TR ve EN çevirileri
Kalite
- Dış CDN çağrısı yok (yazı tipi, simge, betik)
- Mobil, koyu/açık, yazdırma görünümü denendi
- Erişilebilirlik: atlama bağlantısı (
skip-link), odak görünürlüğü, kontrast,langözniteliği - Modül kapalıyken bile çiziliyor (
cp_path_if_exists,cp_widget_areaboş dönebilir) - Varsayılan temaya bağımlı şablonlar belgelendi