Tablolar ve Kayıt Listeleri
Tema kendi ızgara kütüphanesini getirmez: kayıt listeleri çekirdeğin Table bileşeniyle çalışır, gerisi düz markup'tır.
Genel Bakış
Bir temanın ihtiyaç duyduğu her tabloyu iki yol karşılar. Soru kaç satır olduğu değil, satırların ne olduğudur.
Table bileşenini 'renderer' => 'list' ile kullanın.
Ön Koşullar
- Temanız etkin olmalı, böylece
Theme::active()onun dizinini verir. - Bileşenin kendisini biliyor olmanız gerekir; bu makale yalnız müşteri tarafındaki görünümü anlatır.
- Tema kökünüzde bir
tables/dizini bulunmalı.
Yapı
Dört katman var ve her biri ayrı bir dosyaya ait. Yukarıdaki sayfalar için çekirdek denetleyici zaten hazırdır, yani tema genelde yalnız ikinci ve üçüncü katmanı yazar.
templates/website/{Tema}/tables/{ad}.php.
views/account/{ad}.tpl.
list.js dosyanız: istemci araması, filtre, sayfalama, sayaç metni, boş durum.
Adım Adım
Kayıt listesi ekleme
- Sayfanın preset'ini başka bir temadan kendi
tables/dizininize kopyalayın. Dosya adı, denetleyicinin verdiği tablo adıyla aynıdır. setRowRender()içindeki markup'ı kendi tasarım dilinizle yeniden yazın; veriye ve sıraya dokunmayın.- Aynı markup'ı view'ın
{foreach}dalına da uygulayın, böylece ilk sayfa ile sonraki sayfalar aynı görünür. - Kaba üç metin köprüsünü verin, sonra sayfayı açıp sayfalar arasında gezin. Sayaç artık sizin dilinizde okunur ve bir filtre hiçbir kaydı bulamadığında boş durum görünür.
Referans
Liste görünümü bileşenin üç davranışını değiştirir.
templates/admin/tables/, sitede Theme::active()->dir()."tables". Admin dizinine konan bir preset hiçbir zaman bulunamaz.
$row["html"] içinde döndürür. $row["data"] altındaki kolon matrisi bu görünümde kullanılmaz.
justBody tam çağrıyla aynı sonucu verir.
Şablonun yapamadığı işi denetleyici bitirir, çünkü tema şablonu korumalı alanda bileşeni çağıramaz:
data-ajax olarak yazar.
Eşiğin altında bütün satırlar ilk yanıtta gelir, data-ajax bulunmaz ve arama, filtre, sayfalama tarayıcıda olur. Eşiğin üstünde aynı adres tek seferde bir sayfa verir. Markup'ınız ikisinde de aynıdır; aşağıdaki satır öznitelikleri bu yüzden kendi değerlerini taşır.
Kap, etkileşim betiğinin ihtiyaç duyduğu metinleri taşır:
Örnek
/** @var \WISECP\Components\Table $table */
if (!isset($table)) return;
$table->setRowRender(function ($row) {
$service = $row["model"];
$name = htmlspecialchars($service["name"]);
$status = $service["status"];
$danger = in_array($status, ['suspended', 'expired'], true) ? ' is-danger' : '';
$link = LinkGenerator::client("service-detail", [$service["id"]]);
// Satırın tamamı, kendi markup'ınızla. Hiçbir yerde <td> yok.
$row["html"] = '<article class="list-item' . $danger . '">'
. '<a href="' . $link . '">' . $name . '</a>'
. '<span class="badge">' . $status . '</span>'
. '</article>';
return $row;
});
<div class="list-rows" data-noun="services"
data-txt-count="{lang key='website/index/list-count'}"
data-txt-nores="{lang key='website/index/list-nores'}"
data-txt-noun="{lang key='website/services/noun'}">
{$rows nofilter}
</div>
Tuzaklar
Arama dosyanın var olup olmadığını sorar ve yoksa devam eder. Hiçbir kayıt tutulmaz, hata görünmez, liste yalnızca boş gelir. Satırlarınız eksikse kodunuzdan önce yolu kontrol edin.
View birinci sayfayı, preset ondan sonraki her sayfayı üretir. İkisi ayrışırsa ziyaretçi ileri gittiği anda satırlar şekil değiştirir.
Hiç kayıt yoksa araç şeridi, liste ve sayfalayıcı birlikte yerini boş duruma bırakır ve ilk kaydı oluşturma yolu sunulabilir. Filtre hiçbir kaydı bulamadığındaysa boş durum kabın içinde kalır ve filtreyi temizleme yolu sunar. Yalnız birini yazmak ziyaretçiyi çıkmazda bırakır.
Preset'ler temanın içinde yaşar, yani her tema yedi dosyanın kendi kopyasını taşır. Eksik kalan biri o temaya boş bir listeye mal olur.
İ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.