Şablon Değişkenleri

1.7k görüntülenme Markdown

Bir view'ın gösterebildiği her şey adlandırılmış bir değişken olarak gelir. Her birini üç katmandan biri yazar: motor, müşteri sayfa paketi ya da temanın kanca dosyası.

Genel Bakış

Tema sorgu yapmaz. Veriyi platform hazırlar, view kendisine verileni gösterir. Bir değişkeni hangi katmanın yazdığını bilmek, o değişken yokken nereye bakacağınızı ve temanın onu değiştirip değiştiremeyeceğini söyler.

Katmanların sırası hep aynıdır. Motor, her sayfada görünüm ortamını yazar. Ardından set_predefined_data("client") her müşteri sayfasının ihtiyacını yazar; geri kalanı temanın hooks.php dosyası ekler, temaya ait olan tek katman odur.

Yapı

Üç Katman

KatmanYazanOraya ne ait
Görünüm ortamıView::render(), admin paneli dahil her sayfadaDil, yazım yönü, varlık adresleri, tema ayarları
Müşteri içeriğiset_predefined_data("client"), her müşteri controller'ındanMarka, menüler, para birimi, sepet, oturum durumu, sözleşme bağlantıları
Tema verisihooks.php, filter:template.variables üzerindenSadece bu temanın ihtiyaç duyduğu, çekirdek değerlerden türetilen her şey

Değerle yanıt veren tek katman tema katmanıdır ve o değer kümeye eklenmez, kümenin tamamının yerine geçer. Dinleyici, kendisine verilen diziyi kendi anahtarlarıyla döndürür; dizi olmayan bir dönüş kümeye dokunmaz.

Sayfa verisi bu üçünün üstünde durur: controller onu addData() ile ekler ve yalnız isteyen sayfa alır.

Referans

Motorun Her Sayfada Yazdıkları

Bunlar view katmanının tema dalında, kanca çalıştıktan sonra atanır. Bir dinleyici onları silemez. Düz PHP motorunda liste daha dardır. Orada $cookie_domain, $demo_mode ve $demo_themes sadece etiket motoru yolunda yazılır. $template_dir temanın adından kurulmuş bir yolu gösterir; o motoru bildiren tema dizinini tema nesnesinden sorar.

$template_dir Aktif tema dizininin dosya sistemi yolu, sonunda ayraçla. Adres değildir; sadece dosya okumak için kullanın.
$tadress Tema dizininin adresi. Tercih edilen yol {asset path='...'}: assets/ içini gösterir ve CSS ile JS'e önbellek kırıcı damga ekler.
$badress Kurulumun taban adresi, sonunda eğik çizgiyle. Bağlı bir alt alan adında bu, ana site değil o hosttur.
$sadress Hiçbir temaya ait olmayan paylaşılan kaynak dizininin adresi (yüklemeler, ülke simgeleri, eklenti varlıkları).
$ui_lang Aktif dil kodu. Sayfa oluşturulurken çözülür; geç yapılan bir dil değişimi de yansır.
$ui_dir Dil paketinden gelen ltr ya da rtl. html etiketine bunu basın; yönü sabit yazmayın.
$cookie_domain Bu kurulumun çerezlerinin yazıldığı host kapsamı; tek hostlu kurulumda boştur. Çerez yazan tema JavaScript'i aynı kapsamı kullanmalıdır.
$demo_mode · $demo_themes Sadece demo kabuğu içindir. Tema listesi demo modu açıkken hesaplanır.
$setting Bu temanın ayar şemasındaki her alanın kayıtlı değeriyle birleşmiş hâli; kaynağı Theme::allSettings(). Renk alanları ayrıca bir _rgb ikizi sunar.

Her Müşteri Sayfasının Eklediği Değişkenler

$company_name Ticari ad; dil paketinin sabitlerinden gelir, yoksa şirket bilgisi bloğunun ilk satırına düşer.
$light_logo_link · $dark_logo_link Renk moduna göre site logosu. Müşteri paneli ve fatura belgesi kendi çiftini taşır ($client_logo_light_link, $invoice_logo_light_link ve koyu ikizleri). Her biri site logosuna düşer.
$favicon_link Kare marka işareti; kelime logosunun sığmadığı yerler için (daraltılmış ray, uygulama simgesi).
$current_year Altbilgi telif satırı için içinde bulunulan yıl. View içinde tarih hesaplamayın.
$lang_list · $lang_count · $selected_lang_key Aktif diller, her dil için hazır bağlantı, dil sayısı ve seçili kodun büyük harfli hâli. Yerleşim onları alternatif dil bağlantısı olarak da gösterir.
$currencies · $currencies_count · $selected_currency · $selected_currency_code Ziyaretçiye sunulan para birimleri (gizlenenler süzülmüş) ve aktif olan. Değiştirme sunucu turudur: aynı sayfaya currency parametresiyle bağlantı verin.
$currency_formats_json · $currency_ids_json · $currency_rates_json · $currency_default Temanın para betiği için hazır JSON. Her biçim, betiğin o para biriminin ayraçlarını çıkardığı örnek bir dizedir.
$header_menu · $footer_menu · $mobile_menu Operatörün yönettiği üç menü ağacı. Mobil ağaç boşsa üst menü ağacına düşer.
$social_links · $contact_email · $contact_phone Sosyal profiller liste olarak; ayrıca yapılandırılmış ilk adres ve numara düz dize olarak, üst ve alt şeritler için.
$visibility_cart · $cart_count Mağazanın açık olup olmadığı ve anlık kalem sayısı. Sayaç her zaman set edilir; rozet sayfa yenilenmeden görünür kılınabilir.
$login_enabled · $registration_enabled · $account_actions_enabled Operatörün hesap anahtarları. Üçüncüsü ne giriş ne kayıt mümkünken false olur; hesap menüsüyle sepeti birlikte gizleyen budur.
$affiliate_enabled · $reseller_enabled · $only_client_panel Hesap menüsü için program anahtarları ve yalnız-panel modu; o modda tema genel siteye dönen bağlantılarını gizler.
$is_logged_in · $client_id Kanonik oturum işareti ve giriş yapmış kimlik. Her "giriş yapmış mı, misafir mi" dalı bu tek işarete bakar.
$privacy_contract_link · $terms_contract_link · $cookie_contract_link Operatörün eşlediği sözleşme sayfaları; eşlenmemişse boştur. Boşken ölü bağlantı basmak yerine bağlantıyı gizleyin.
$cookie_notice Çerez rızası istemi hazır bir yük olarak; rıza kapalıysa boş dizi. Kararı sunucu verir: çerezler tarayıcıdan okunamaz.
$notification_count · $notification_count_text Zil sayacı ve rozet metni (iki basamağın ötesinde kırpılır). Her zaman set edilir, ama yalnız müşteri kabuğunu isteyen sayfa için sorgulanır.
$password_min_length · $password_special_chars · $default_country Parola öneri butonu için operatörün parola kuralları; ayrıca telefon ve adres alanlarında son çare olarak sitenin varsayılan ülkesi.
$links · $meta · $breadcrumb · $local_l · $show_powered_by Sayfa çerçevesi: controller'ın bağlantı haritası, sayfa üstverisi, iz, kurulumun varsayılan dili ve altbilginin platform imzasını basıp basmayacağı.

Giriş Yapılmış Sayfanın Eklediği Değişkenler

Bunlar yalnız üye giriş yapmışken vardır. Genel bir sayfa bunları $is_logged_in ile korumadan okumamalıdır.

$account_info · $user_info Kabuk için gösterim kimliği (ad, avatar, baş harfler, biçimlenmiş bakiye, destek PIN'i, önceki giriş) ve arkasındaki ham hesap satırı.
$announcements Hesap kabuğu için operatör duyuruları; dile ve aktif hesabın ülkesine göre süzülmüş olarak gelir.
$show_services · $show_domains · $show_invoices · $show_support · $show_sms Bölüm görünürlüğü: verilmiş alt kullanıcı izni VE operatörün özellik anahtarı. Ziyaretçinin açamayacağı bölüme bağlantı verilmez.
$is_self_account · $switch_accounts Aktif hesabın üyenin kendi hesabı olup olmadığı ve geçebileceği hesaplar.
$client_badges · $client_badges_text Bölüm başına dikkat sayaçları ham sayı olarak, ayrıca rozet metinleri. Ham sayılar erişilebilir adlar için durur; onlar gerçek rakamı söyler.
$order_service_link "Hizmet satın al" bağlantısının hedefi; alt kullanıcı sipariş veremiyorsa boştur. Kataloğu kapatan bir tema bunu kanca dosyasında ezer.
$dashboard_modal · $twofa_required · $password_required Pano kapı zinciri. Her yüklemede tek bir diyalog açılır ve hangisi olduğu view'da değil burada adlandırılır.
$client_addon_links Etkin addon modüllerinin müşteri paneline kattığı sayfalar; her biri ad, adres ve ikon taşır.
$verification_required · $verify_link Üyenin kimlik doğrulaması beklerken set edilir. Bant yerleşime aittir; kapalı sayfalar için yönlendirme view çalışmadan önce yapılmıştır.

Bileşik Değerlerin Biçimi

view'a gerçekte ulaşan şey
// $lang_list : AKTİF dil başına bir satır, sıralı, kurulumun varsayılan dili başta.
$lang_list = [
    ['rank' => 1, 'local' => 1, 'selected' => true, 'key' => 'en', 'name' => 'English',
     'global-name' => 'English', 'link' => 'https://example.com/home',
     'cc' => 'gb', 'cname' => 'United Kingdom', 'pc' => '44', 'flag-img' => 'https://example.com/resources/assets/images/flags/gb.svg'],
];

// $currencies : aktif ve gizlenmemiş para birimi satırları.
$currencies = [
    ['id' => 1, 'code' => 'USD', 'name' => 'US Dollar', 'prefix' => '$', 'suffix' => '',
     'rate' => '1.00000000', 'local' => 1, 'hidden' => 0],
];

// $social_links : yapılandırılmış her profil için bir giriş.
$social_links = [
    ['name' => 'X', 'url' => 'https://x.com/example', 'icon' => 'bi bi-twitter-x'],
];

// $account_info : biçimlenmiş gösterim kimliği. `balance` sembolüyle birlikte bir DİZEDİR.
$account_info = [
    'name' => 'Ada', 'surname' => 'Lovelace', 'full_name' => 'Ada Lovelace',
    'email' => '[email protected]', 'avatar' => '', 'initials' => 'AL',
    'balance' => '$120.00', 'support_pin' => '481625', 'two_factor' => true,
    'is_reseller' => false, 'last_login' => [], 'last_login_date' => '02/08/2026 - 11:40',
    'last_login_ip' => '203.0.113.9', 'last_login_country' => 'GB', 'last_login_city' => 'London',
    'dealership' => [],
];

// $client_badges : ham sayılar; $client_badges_text aynı anahtarları rozet dizesi olarak taşır.
$client_badges = ['invoices' => 2, 'support' => 1, 'domains' => 0, 'services' => 0];

// $cookie_notice : rıza kapalıyken boş dizi.
$cookie_notice = [
    'needs_prompt' => true, 'text' => 'Çerez kullanıyoruz…', 'policy_link' => 'https://example.com/cookie-policy',
    'policy_label' => 'Çerez politikası', 'accept' => 'Kabul Et', 'reject' => 'Reddet',
    'prefs' => 'Tercihler', 'save' => 'Kaydet', 'prefs_title' => 'Çerez Tercihleri',
    'categories' => [
        ['key' => 'necessary', 'label' => 'Zorunlu', 'desc' => '…', 'locked' => true, 'granted' => true],
    ],
    'url' => 'https://example.com/cookie-consent',
];

İmzalar

diziyi dolduran metotlar
// Controllers : sayfa ve paket.
public function set_predefined_data(string $type = 'client', array $meta = [], array $breadcrumbs = [], array $links = []): void;
public function addData($k = '', $v = ''): void;
public function getData($key);

// View : render'ın kendisi. $return_output = true HTML'i basmak yerine döndürür.
public function chose($dir, $noTemplate = false): self;
public function render($_name = null, $data = [], $return_output = false, $source = false): mixed;

// Theme : $setting'in arkasındaki ayar haritası ve istek dışında kullanılan bağlamsız render.
public function allSettings(): array;
public function render(string $view, array $data = []): string;

Örnek

Bir müşteri sayfası ve onu geri okuyan view. Controller sadece bu sayfaya ait olanı ekler.

controller
public function page_overview(&$links, &$meta, &$breadcrumbs): string
{
    // set_predefined_data İÇİNDE okunur, bu yüzden çağrıdan ÖNCE set edilmelidir.
    $this->addData("show_client_subnav", true);

    $this->set_predefined_data("client", $meta, $breadcrumbs, $links);

    // Paketin üstüne sayfa verisi. Koşulsuz set edilir: view'ın okuduğu anahtar her
    // render'da var olmalıdır, boş olsa bile; yoksa view tanımsız anahtara düşer.
    $this->addData("recent_orders", $this->model->recent_orders((int) $this->getData("client_id")));

    echo $this->view->chose("website")->render("account/overview", $this->data, true);

    return '';
}
view, manifestin bildirdiği motorda
{* Ortam katmanı: yön ve dil motordan gelir, asla sabit yazılmaz. *}
<section dir="{$ui_dir}" lang="{$ui_lang}">

    {* Müşteri katmanı: yalnız-giriş değerine dokunmadan önce oturum bayrağıyla koru. *}
    {if $is_logged_in}
        <p>{$account_info.full_name} · {$account_info.balance}</p>
        {if $client_badges.invoices > 0}
        <span class="badge">{$client_badges_text.invoices}</span>
        {/if}
    {/if}

    {* Tema katmanı: bu temanın bildirdiği bir ayar, doğrudan $setting'ten okunur. *}
    {if $setting.topbar_enabled}<div class="topbar">{$setting.topbar_text nofilter}</div>{/if}

    {* Sayfa katmanı: default:[] sayesinde boş sayfa satır başına uyarı maliyeti üretmez. *}
    {foreach $recent_orders|default:[] as $order}
        <a href="{link route='invoice-detail' p1=$order.id}">{$order.number}</a>
    {/foreach}
</section>

Tuzaklar

Koşul içinde set edilen değişken, o koşulu atlayan sayfalarda yoktur

Her global değeri koşulsuz set edin, görünürlüğe view'da karar verin. Yokluk "false" demek değildir: view tanımsız anahtara düşer ve her biri bir günlük yazımına mal olur. Döngü içinde bu, ölçülebilir bir yavaşlamadır.

Değişken kancası diziyi birleştirmez, yerine koyar

Kendisine verilen dizi dışında bir şey döndüren dinleyici, platformun topladığı bütün anahtarları düşürür ve yerleşim ilk eksik adreste kırılır. Gelen diziden başlayın, üzerine ekleyin, tamamını döndürün.

Arka plan sayfası ortamı alır, müşteri paketini almaz

Zamanlanmış bir görevden ya da belge üreticisinden kurulan view doğrudan tema nesnesi üzerinden gider. Paketi dolduracak bir controller çalışmamıştır. Sadece ortam katmanı ve tema ayarları oradadır; geri kalanı sayfa verisi olarak geçirilir.

Adresler view'da kurulur, değişken olarak paslanmaz

Controller, temanın kendi kurabileceği sayfalar için hazır bağlantı dağıtmaz. Bunları bağlantı fonksiyonu ve bir rota anahtarıyla kurun. Bir sayfayı yeniden adlandıran tema için controller değişmez.

Faydalı oldu mu?

Geri bildiriminiz için teşekkürler!

Hâlâ Yardıma mı İhtiyacınız Var?

Yukarıda bulamadığınız her şey için destek ekibimiz her zaman yanınızda.