İçeriğe geç

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ı

  1. 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.
  2. 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.
  3. 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.json temayı 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.json sürümü MAJOR.MINOR.PATCH olmalı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.json name, version, entry dolu
  • screenshot.png var (mağaza ve tema listesi görseli)
  • Pakette .php, .htaccess, cp-core/ yok

Şablon

  • layout.html.twig title, meta_description, meta_robots, stylesheets, content, javascripts bloklarını tanımlıyor
  • theme.head.end ve theme.footer.before kancaları var
  • Ön yüzde cp_user(), cp_is_granted(), cp_flashes() kullanılıyor (app.user değil)
  • Kullanıcı verisi kaçışlı; |raw yalnı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_area ile ç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() ve cp_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_area boş dönebilir)
  • Varsayılan temaya bağımlı şablonlar belgelendi
Son güncelleme: 13.10.2026