View ve Şablonlar
Controller adlandırılmış değerler toplar ve şablon adıyla birlikte view'a verir. Şablon o adları değişken olarak okur ve sayfayı gösterir.
Genel Bakış
Sayfa üretmek iki çağrıdır. chose() şablon dizinini seçer; render() o dizindeki bir şablonu o ana kadar toplanan veriyle çalıştırır. Veri şablona anahtar adlarını taşıyan sıradan değişkenler olarak ulaşır; yani bir şablon kendisi için hiçbir şey çekmez.
Yönetim panelinin şablonları düz PHP'dir ve ürünle gelir. Sitenin şablonları bir temaya aittir ve aynı çağrı sabit bir dizin yerine etkin temayı çözer.
Referans
İmzalar
Beşi de instance metodudur. Controller içinde instance $this->view, başka her yerde tekil nesne View::$init'tir.
public function chose($dir, $noTemplate = false): self;
public function render($_name = null, $data = [], $return_output = false, $source = false): mixed;
public function get_template_dir($type = 'website'): string; // TEMPLATE_DIR . $type . DS
public function get_template_url($type = 'website'): string; // APP_URI . "/templates//"
public function get_resources_url($str = '', $l_slash = true, $r_slash = false): string;
render() Metodunun Dört Parametresi
'widgets/list' → templates/admin/widgets/list.php. Dosya yoksa hata fırlatmaz, boş dize döner.
$this->data. Dizi olmayan her değer boş kabul edilir.
false işaretlemeyi gösterir ve boş dize döndürür; true onun yerine işaretlemeyi döndürür. Sayfa metodu sayfasını döndürdüğü için true geçer.
true dosyayı dahil eder ve dosyanın döndürdüğü değeri verir, hiçbir şey basmaz. Aslında bir veri dosyası olan (dizi döndüren) şablon böyle okunur. Dosya yoksa false.
chose() Neyi Kabul Eder
| Argüman | Çözümlenen | Ne zaman |
|---|---|---|
'admin' | templates/admin/, düz PHP | Her yönetim ekranı |
'website' | Etkin temanın dizini ve motoru | Ziyaretçi isteği. Yönetim ya da cron bağlamında düz PHP olarak templates/website/ dizinine düşer |
'system' | templates/system/, düz PHP | Ölümcül hata, bakım, fatura belgesi |
$noTemplate = true ile herhangi bir yol | Yolun kendisi, olduğu gibi | Kendi şablon dizinini kullanan modül |
Veri Şablona Nasıl Ulaşır
Controller'ın eklediği değerler, şablon çalışmadan önce değişkenlere çıkarılır. rows adıyla eklenen bir değer $rows olarak okunur. Bunların üstüne view her çağrıya kendi beş değişkenini ekler:
'tr'. Yalnız controller zaten vermemişse set edilir.
'ltr' ya da 'rtl'. Kök elemana bunu basın, yönü asla sabit yazmayın.
Örnek
İki yarı bir arada: controller değerleri adlandırır, şablon tam o adları geri okur.
public function page_list(&$links, &$meta, &$breadcrumbs): string
{
$this->addData('rows', $this->model->list());
$this->addData('total', $this->model->list(true));
// Üçüncü argüman true: işaretlemeyi basmak yerine döndür, çünkü sayfa
// metodunun işi render edilmiş sayfayı DÖNDÜRMEKTİR.
return $this->view->chose('admin')->render('widgets/list', $this->data, true);
}
<?php if (!defined("CORE_DIR")) exit(); ?>
<h1><?= Language::g("widgets-title") ?> (<?= (int) ($total ?? 0) ?>)</h1>
<?php foreach (($rows ?? []) as $row): ?>
<div class="card">
<span><?= htmlspecialchars($row['name'] ?? '') ?></span>
</div>
<?php endforeach; ?>
<?php include $template_dir . "inc" . DS . "footer.php"; ?>
Basmak yerine veri döndüren bir şablonu okumak ve arka plan işinden tema view'i üretmek:
// $source = true: dosyanın kendi dönüş değeri geri gelir, hiçbir şey basılmaz.
$columns = View::$init->chose('admin')->render('tables/widgetList', [], false, true);
// Ziyaretçi isteği dışında (cron, mail, PDF) chose('website') temayı ÇÖZMEZ.
// Motoru ve dizini bağlamdan bağımsız çözen temanın kendisine sorun.
$html = Theme::active()->render('account/invoice-pdf', ['invoice' => $invoice]);
Tuzaklar
Admin şablonu otomatik kaçış yapmayan düz PHP'dir. Bir formdan, API'den ya da uzak bir sağlayıcıdan gelen değer geldiği gibi görünür. Kaçırmak sizin işiniz.
Ziyaretçi isteği dışında tema çözümü atlanır ve çağrı düz PHP yoluna düşer. Temada olmayan bir .php dosyası arar, hatasız biçimde boş dize döndürür. Bunun yerine görünümü tema nesnesi üzerinden üretin.
Her şablon, uygulamanın sabitleri yoksa çıkarak başlar. O satır olmadan dosya, oturumsuz, izinsiz ve verisiz bir sayfa parçasını çalıştıran bir adrestir.
Döngü içindeki eksik bir anahtar satır başına bir uyarı üretir ve her uyarı bir disk yazımıdır. Bir liste şablonunda bu, hızlı sayfa ile yavaş sayfa arasındaki farktır.
İ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.