Zum Hauptinhalt springen

Theme bauen: UIEngine & verfügbare Variablen

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.

— Der wohl wichtigste architektonische Fund der gesamten Entwicklung

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).