Contao Template Studio - Twig Template abhängig von der Seite ausgeben
Das Ziel
Es soll eine Nachrichtenliste auf unterschiedlichen Seiten einer Webseite eingebunden werden. Zum Beispiel sollen auf der Startseite die 5 letzen News als Teaser ausgegeben werden, auf der Unterseite News hingegen eine längere Teaserliste mit mehr als 5 Teasern.
Das Standardtemplate news_latest hat für die Überschrift ein h2 Tag. Jetzt kann es aber sein, dass eine korrekte Semantik auf der Startseite ein h3 Tag erfordert, während es auf der Newsseite ein h2 Tag sein muss.
Die Lösung, wie man das mit nur einem Template lösen kann, steht hier!
Dies ist das Twig-Template news_latest:
<div class="layout_latest arc_{{ archive.id }} block{{ class }}">
{% block info %}
<p class="info"><time datetime="{{ datetime }}">{{ date }}</time> {{ author }}</p>
{% endblock %}
{% if addImage %}
{{ include('@Contao/image.html.twig') }}
{% endif %}
<h2>{{ linkHeadline|sanitize_html('contao') }}</h2>
<div class="ce_text block">
{{ teaser|default|sanitize_html('contao')|csp_inline_styles|insert_tag_raw }}
</div>
{% if hasText.invoke() or hasTeaser %}
<p class="more">{{ more|default|sanitize_html('contao') }}</p>
{% endif %}
</div>
{#
This template is used as a news list template by default, so we only add
JSON-LD data in case this is a news article without a reader
#}
{% if not hasReader %}
{% do add_schema_org(getSchemaOrgData.invoke()) %}
{% endif %}
Vorgehensweise
- Erstelle ein eigenes Template
news_latest. - Kopiere den Quelltext vom Original komplett und füge ihn in Deinem Template ein. Lösche Dabei die
extendsAnweisung in Zeile 1. - ändere folgende Zeile:
<h2>{{ linkHeadline|sanitize_html('contao') }}</h2>
zu
{# Startseite hat die id=2 und braucht eine h3 Überschrift #}
{% if contao.page.id == 2 %}
<h3>{{ linkHeadline|sanitize_html('contao') }}</h3>
{% else %}
<h2>{{ linkHeadline|sanitize_html('contao') }}</h2>
{% endif %}
Das war ein Problem, das ich auf dieser Seite hatte. Jetzt werden die Musikteaser auf der Startseite mit einem h3 Tag ausgegeben, auf der Unterseite musik (und ggf auf allen anderen Seiten) hingegen mit h2.
Kommentare
Einen Kommentar schreiben