Tema Ayarları
Temanın kabul ettiği ayarları manifestinde bildirin. Admin formu, doğrulama ve kayıt dosyası ardından gelir; view sonucu tek bir değişkenden okur.
Genel Bakış
Tema bir sınıf değil, veridir. Neyle yapılandırılabileceğini bildirir, nasıl düzenlendiğine karışmaz. Panel her alanı bildirilen tipine göre doğrular ve değerleri temanın kendi dizinine yazar.
Sözleşmenin sınırı da budur. Tema bir alan ekleyip kontrol alır ama formun altyapısına karar veremez. Şemada olmayan bir değer asla kaydedilmez.
Yapı
İki Dosya, İki Sahip
Şemanın Biçimi
$manifest['settings'] = [
// anahtar => grubun başlığı ve ikonu. Etiket, bu temanın bir LOCALE ANAHTARIDIR.
'groups' => [
'topbar' => ['label' => 'grp_topbar', 'icon' => 'bi-megaphone'],
],
// anahtar => tanımlayıcı. Anahtar aynı anda POST adı, config anahtarı ve view'ın
// okuduğu addır: yeniden adlandırmak kayıtlı olanı öksüz bırakır.
'fields' => [
'topbar_enabled' => ['type' => 'switch', 'group' => 'topbar', 'label' => 'set_topbar_enabled', 'default' => false],
],
];
Adım Adım
Bir Grup Bildirin
- Gruplar haritasına başlık ve ikon sınıfı taşıyan bir giriş ekleyin.
- Başlık metnini temanın locale dosyasına iki dilde koyun ve anahtarıyla referans verin. Çevirisi olmayan anahtar kendisi olarak görünür.
- Grubu bildirilmemiş bir alan yine görünür; gruplanmamış olur.
Bir Alan Bildirin
- Tipi aşağıdaki listeden seçin. Kontrolü, doğrulamayı ve saklanan değerin biçimini o belirler.
- Gerçek bir varsayılan verin, boş yer tutucu değil. Temiz kurulumdaki ve her sıfırlamadan sonraki değer budur.
- Yardım cümlesi için
desc, başka bir alan açıkken anlamlıysadependsekleyin. - Yapılandırma sayfasını yenileyin. Kontrol oradadır, başka dosyaya dokunulmadı.
View'da Okuyun
- Ayar değişkeninden anahtarıyla okuyun. Fonksiyon değil değişkendir; bir koşulun içinde böyle çalışır.
- Renk için değerin kendisini özelliğe,
_rgbikizini de yarı saydam bir sürüm gereken her yere okuyun. - PHP tarafında tek bir ayarı tema nesnesinden anahtarıyla isteyin; haritanın tamamı yüklenmez.
Admin Formunu Devralın
- Tema dizinine bir
admin-settings.phpekleyin; üretilen formun tamamının yerine geçer. - Markup'ı size verilen form oluşturucu, kayıtlı değerler ve şemayla kurun. HTML'i dize olarak döndürün.
- Alan adlarını şema anahtarlarıyla birebir aynı tutun. Başka adla verilen bir kontrol gönderilir ve atılır.
Referans
Alan Tipleri
| Tip | Kontrol | Saklanan | Kayıtta doğrulama |
|---|---|---|---|
switch, checkbox | Kutucuk; desc yanındaki etiket olur | Boolean | İşaretliyse true, gelmemişse false |
select | options'tan kurulan açılır liste | Seçilen anahtar | options anahtarlarından biri olmalı, değilse varsayılan |
number | Sayı girişi | Tam sayı | Tam sayıya çevrilir; sayısal olmayan sıfır olur |
color | Renk seçici ve yazılabilir hex kutusu | Baştaki diyezle birlikte hex dize | Üç ile sekiz arası hex basamağı, değilse varsayılan |
textarea | rows ile boyutlanan metin kutusu | Dize, çok dilliyse dil haritası | html kapalıysa etiketler temizlenir, açıksa izin listesine süzülür |
| başka her şey ya da tipsiz | Metin girişi | Dize, çok dilliyse dil haritası | Metin kutusuyla aynı |
Tanımlayıcının Kabul Ettikleri
['rail' => 'opt_rail', 'card' => 'opt_card']. Kayıtlı değerin denetlendiği izin listesi de budur.
['topbar_enabled' => true]. Satır, her koşul sağlanana kadar kapalı durur; hem yüklemede hem operatör yazarken.
Ayar API'si
// Manifestteki ayarlar bloğu, bildirildiği gibi (groups + fields).
public function settingsSchema(): array;
// Tek değer: anahtar hiç kaydedildiyse kayıtlı olan, yoksa şema varsayılanı, o da
// yoksa null. Platform tek bir tema yeteneğini böyle okur.
public function setting(string $key): mixed;
// Yalnız kayıtlı değerler (config.php). İlk kayda kadar boştur.
public function savedConfig(): array;
// Her şema alanı değeriyle birleşmiş hâlde : view'ın $setting olarak aldığı şey.
// Çok dilli değer burada AKTİF dile indirgenir ve renk alanı ayrıca bir
// "{anahtar}_rgb" girdisi üretir.
public function allSettings(): array;
// Bir hex rengi, rgba() ifadesinin istediği virgüllü üçlüye çevirir. Kısa biçimler
// genişletilir ve kısa değer doldurulur, bu yüzden boş dize hata değil üç sıfır verir.
// Yukarıdaki "{anahtar}_rgb" girdilerini üreten budur.
public static function hexToRgb(string $hex): string;
Örnek
Dört alanlı bir grup, ürettiği kayıt dosyası ve onu geri okuyan view. Birlikte gösterilmelerinin tek sebebi var: şemadaki anahtar, dosyadaki anahtar ve view'daki ad aynı dizedir.
return [
'engine' => 'smarty',
'status' => 'ready',
'meta' => [
'name' => 'Acme',
'version' => '1.0.0',
'author' => 'Acme Ltd',
'image' => 'cover.png',
],
'settings' => [
'groups' => [
'brand' => ['label' => 'grp_brand', 'icon' => 'bi-palette'],
'topbar' => ['label' => 'grp_topbar', 'icon' => 'bi-megaphone'],
'checkout' => ['label' => 'grp_checkout', 'icon' => 'bi-cart3'],
],
'fields' => [
// Bir marka rengi. `from_logo`, panelin site logosundan çıkardığı paletteki
// sırasıdır; "renkleri logodan seç" düğmesi bu alanı o sıradan doldurur.
// Varsayılan, diyez artı altı onaltılık hane biçimindedir (seçicinin kendi
// biçimi) — yer tutucuyu bu temanın gerçek rengiyle değiştirin. Boş
// bırakılırsa türetilen primary_color_rgb üç sıfır okunur ve ondan kurulan
// her yarı saydam yüzey siyaha boyanır.
'primary_color' => [
'type' => 'color',
'group' => 'brand',
'label' => 'set_primary_color',
'from_logo' => 0,
'default' => '#RRGGBB',
],
// Kapı. Altındaki her şey buna bağlıdır.
'topbar_enabled' => [
'type' => 'switch',
'group' => 'topbar',
'label' => 'set_topbar_enabled',
'desc' => 'set_topbar_enabled_desc',
'default' => false,
],
// Dil başına ve markup taşıyabilir: duyurunun içinde genelde bir bağlantı olur.
// Saklanan değer bir haritadır; view yine dize alır.
'topbar_text' => [
'type' => 'textarea',
'group' => 'topbar',
'label' => 'set_topbar_text',
'default' => '',
'rows' => 3,
'multilang' => true,
'html' => true,
'depends' => ['topbar_enabled' => true],
],
// Anahtarlar saklanan şeydir; değerler bu temanın locale anahtarlarıdır.
'checkout_sidebar' => [
'type' => 'select',
'group' => 'checkout',
'label' => 'set_checkout_sidebar',
'options' => [
'rail' => 'opt_checkout_rail',
'card' => 'opt_checkout_card',
'stack' => 'opt_checkout_stack',
],
'default' => 'rail',
],
'popup_width' => [
'type' => 'number',
'group' => 'checkout',
'label' => 'set_popup_width',
'default' => 500,
],
],
],
];
return [
// Seçicinin gönderdiği hâliyle, baştaki diyezle saklanır. Dikkat: operatör
// dokunmamış olsa da HER şema alanı her kayıtta yeniden yazılır.
'primary_color' => '#RRGGBB',
'topbar_enabled' => true,
// Çok dilli: dil başına saklanır, kayıt anındaki her AKTİF dil için bir giriş.
'topbar_text' => [
'en' => 'Free migration this month.',
'tr' => 'Bu ay ücretsiz taşıma.',
],
'checkout_sidebar' => 'card',
'popup_width' => 520,
];
{* Boolean doğrudan bir koşulun içinde okunur; bunun DEĞİŞKEN olup fonksiyon
olmamasının sebebi budur: kayıtlı bir fonksiyon {if} içinden çağrılamaz. *}
{if $setting.topbar_enabled}
{* Kayıtta markup korundu, bu yüzden burada filtresiz basılır. *}
<div class="topbar">{$setting.topbar_text nofilter}</div>
{/if}
{* Select yalnızca saklanan anahtarıdır: dört kez dallanmak yerine sınıf olarak kullanın. *}
<div class="checkout-layout-{$setting.checkout_sidebar}">
{* Renk alanı ayrıca bir _rgb ikizi üretir; aynı rengin yarı saydam sürümü için. *}
<style>
:root {
--acme-brand: {$setting.primary_color};
--acme-brand-rgb: {$setting.primary_color_rgb};
}
</style>
Tuzaklar
Anahtar hem form adı, hem saklanan anahtar, hem de view'ın okuduğu addır. Eski adla saklanmış değer bir daha okunmaz ve temizlenmez. Temayı yapılandırmış her kurulum varsayılana döner.
Sadece değer tutar. Temanın adı ve sürümü manifestte kalır; tema listesi ve güncelleme kontrolü onları oradan okur. Dosyayı tema paketiyle göndermek, test yapılandırmanızı onu kuran herkese teslim eder.
Ham ayarı isteyen PHP haritanın tamamını alır. View aktif dili çözülmüş hâlde alır. Birini diğeri sanan kod tam olarak bir yerde çalışır.
Bağımlılık satırı gizler, değeri devre dışı bırakmaz. Bağımlı bir ayarı okuyan view, bağlı olduğu alanı da kontrol etmelidir. Yoksa operatörün kapalı sandığı bir şeyi gösterir.
İlgili Makaleler
Geri bildiriminiz için teşekkürler!
Yukarıda bulamadığınız her şey için destek ekibimiz her zaman yanınızda.