View ve Şablonlar

1.7k görüntülenme Markdown

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.

coremio/classes/View.php
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

$_name Seçili dizine göreli şablon yolu, uzantısız: 'widgets/list' → templates/admin/widgets/list.php. Dosya yoksa hata fırlatmaz, boş dize döner.
$data Şablon çalışmadan önce değişkenlere çıkarılan anahtar/değer haritası. Controller'ın topladığı veriyi geçin: $this->data. Dizi olmayan her değer boş kabul edilir.
$return_output 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.
$source 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ümlenenNe zaman
'admin'templates/admin/, düz PHPHer yönetim ekranı
'website'Etkin temanın dizini ve motoruZiyaretç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 yolYolun kendisi, olduğu gibiKendi ş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:

$template_dir Seçili dizinin dosya sistemi yolu, sonunda ayraçla. Bir şablonun başka bir şablonu nerede olduğunu bilmeden dahil edebilmesini sağlayan budur.
$ui_lang Bu istek için çözülen dil, örn. 'tr'. Yalnız controller zaten vermemişse set edilir.
$ui_dir O dilin yazım yönü: 'ltr' ya da 'rtl'. Kök elemana bunu basın, yönü asla sabit yazmayın.
$badress, $tadress, $sadress Kurulumun, seçili şablon dizininin ve paylaşılan kaynak dizininin adresi. Varlık bağlantılarında URL'i elle birleştirmek yerine bunları kullanın.
$setting Yalnız temalı site sayfalarında: etkin temanın birleştirilmiş ayarları, şema varsayılanları dahil. Yönetim ve sistem şablonlarında yoktur.

Örnek

İki yarı bir arada: controller değerleri adlandırır, şablon tam o adları geri okur.

controller
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);
}
templates/admin/widgets/list.php
<?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:

diğer iki çağrı biçimi
// $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

İnsanın yazdığı her şeyi kaçırın

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.

Arka plan işi temayı chose('website') ile seçemez

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.

Şablon doğrudan girilmeyi reddeder

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.

Her anahtarı varsayılanla okuyun

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.

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.