Grundlagen der Template-Sprache
{extends 'base.tpl'}
{block content}
{if $featured_image}...{/if}
{foreach $items as $item}...{/foreach}
{$title|escape}
{/block}
Auto-Escaping ist Standard - {$title} escaped automatisch, {$body|raw} gibt bewusst unescaped HTML aus (z.B. für bereits gerenderten Block-Editor-Inhalt).
Wichtige verfügbare Variablen
$base_url,$csrf_field,$cms_title,$tagline$position_nav,$position_sidebar,$position_footer_widgets- Modul-Positionen$header_announcement,$footer_extra- Full-Site-Editing-Zonen- Bei Einzelansichten zusätzlich:
$title,$slug,$body,$featured_image,$content_id
Wichtige Einschränkung bei Kurzansichten (Teaser/Archiv)
Kurzansichten (teaser.tpl, archive.tpl) laufen über eine KOMPLETT ISOLIERTE, frische Template-Engine-Instanz - base_url, csrf_field und ähnliche global zugewiesene Variablen sind dort NICHT automatisch verfügbar, nur die Felder, die der jeweilige Content-Typ selbst über seine getViewData()-Methode zurückgibt. featured_image war ursprünglich so ein Fall - erst nachträglich in die gemeinsamen Basis-Felder aufgenommen, die jeder Content-Typ automatisch bekommt.
Praktische Konsequenz: in einem Teaser-Template lieber wurzelrelative Links (/{$slug}/) statt {$base_url}/{$slug}/ verwenden - Letzteres würde bei fehlendem base_url einfach zu einem funktionierenden, aber unbeabsichtigt wurzelrelativen Link.
Datenbankzugriff NIEMALS direkt im Template
Templates bekommen laut Architektur nur fertige, bereits aufbereitete Daten - kein eigener Datenbankzugriff. Wer zusätzliche Daten braucht (z.B. eine Kategorien-Seitenleiste), berechnet sie im Controller (meist public/index.php) und übergibt sie per $ui->assign('variablenname', $wert).