Das neue Template-System von Contao 3.3
am von Martin Auswöger • @ausi
In Contao 3.3 wurde der Funktionsumfang des Template-Systems deutlich erweitert. So ist es jetzt möglich von anderen Templates abzuleiten, nur Teilbereiche aus Core-Templates zu überschreiben und Templates in einzelne Bereiche aufzuteilen.
Tipp: Nutzen Sie die Möglichkeit zwischen der Template- und HTML-Ansicht zu wechseln, um die Beispiele einfach nachvollziehen zu können.
Template-Blöcke
Mit den Funktionen block()
und endblock()
lässt sich ein Template in Bereiche unterteilen. Das Template einer Formularzeile könnte folgendermaßen aussehen:
<div>
<?php $this->block('label') ?>
<label><?php echo $this->label ?></label>
<?php $this->endblock() ?>
<?php $this->block('field') ?>
<input type="text" name="<?php echo $this->name ?>">
<?php $this->endblock() ?>
</div>
<div>
<label>Vorname</label>
<input type="text" name="vorname">
</div>
Vererbung und updatesicheres Überschreiben
Wenn Sie von diesem Template mit extend()
ableiten, können Sie die einzelnen Blöcke überschreiben oder erweitern, mit parent()
können Sie den Inhalt des ursprünglichen Blocks einfügen.
<?php $this->extend('form_row') ?>
<?php $this->block('label') ?>
<label class="special-label"><?php echo $this->label ?></label>
<?php $this->endblock() ?>
<?php $this->block('field') ?>
<div><?php $this->parent() ?></div>
<?php $this->endblock() ?>
<div>
<label class="special-label">Vorname</label>
<div><input type="text" name="vorname"></div>
</div>
Sie können extend()
auch verwenden um nur die Template-Daten zu modifizieren, bevor das eigentliche Template verarbeitet wird. Das folgende Beispiel erweitert das Galerie-Template um eine CSS-Klasse mit der Anzahl der Bilder pro Reihe. Dabei kann dem Template der gleiche Dateiname wie dem Core-Template gegeben werden – so passen Sie das Template updatesicher an.
<?php $this->extend('ce_gallery') ?>
<?php $this->class .= ' images-per-row-' . $this->perRow ?>
<div class="ce_gallery block images-per-row-4">
<ul>
...
</ul>
</div>
Verschachtelte Blöcke
Zusätzlich können Sie Blöcke verschachteln, um noch genauer festzulegen welche Bereiche verändert werden. Ein gutes Beispiel dafür ist das Template fe_page in Contao 3.3. Mit dem Block body
könnte z. B. der komplette Inhaltsbereich überschrieben werden. Würden Sie etwa nur den Footer anpassen wollen, überschreiben oder erweitern Sie nur den Block footer
.
Fazit
Die Erweiterung des Template-Systems ist eines der wichtigsten neuen Features, die Contao je erhalten hat. Die Möglichkeit Templates „updatesicher“ zu überschreiben, wird vielen Benutzern die Vorbehalte nehmen die Templates und damit das HTML-Markup bei Bedarf projektspezifisch anzupassen.
Alle RockSolid Themes verwenden bereits die neuen Template-Funktionen. Für mehr Beispiele laden Sie sich unser kostenloses Theme Open Sauce für Contao 3.3 herunter und sehen sich den Templates-Ordner an.