logo

Extra Block Types (EBT) - Neue Erfahrung im Layout Builder❗

Extra Block Types (EBT) - gestylte, anpassbare Blocktypen: Diashows, Registerkarten, Karten, Akkordeons und viele andere. Eingebaute Einstellungen für Hintergrund, DOM Box, Javascript Plugins. Erleben Sie die Zukunft der Layouterstellung schon heute.

Demo EBT-Module EBT-Module herunterladen

❗Extra Absatztypen (EPT) - Erfahrung mit neuen Absätzen

Extra Paragraph Types (EPT) - analoger, auf Absätzen basierender Satz von Modulen.

Demo EPT-Module EPT-Module herunterladen

Scroll

Vergleich der Paradigmen PHPTemplate und Twig

19/06/2025, by Ivan

Menu

Über Twig

Twig ist eine kompilierte Template-Sprache auf PHP-Basis. Wenn Ihre Webseite gerendert wird, nimmt die Twig-Engine das Template und wandelt es in ein „kompiliertes“ PHP-Template um, das in einem geschützten Verzeichnis unter sites/default/files/php/twig gespeichert wird. Die Kompilierung erfolgt einmalig, Template-Dateien werden für die Wiederverwendung zwischengespeichert und bei Leerung des Twig-Caches neu kompiliert.

Die Drupal-Twig-Initiative hat dieselbe Motivation wie die Symfony-Initiative: eine moderne, leistungsfähige und objektorientierte Engine zu implementieren, die es Entwicklern erlaubt, sich besser auf Drupal zu konzentrieren.

1. Docblock

PHPTemplate:

<?php 
/** 
 * @file
 * Dateibeschreibung
 */
?>

Twig:

{# 
/** 
 * @file
 * Dateibeschreibung
 */
#}

2. Dateinamen und Funktionen

PHPTemplate-Datei: node--article.tpl.php
Twig-Datei: node--article.html.twig

PHPTemplate-Funktion: THEME_node_links()
Twig-Datei: node-links.html.twig

3. Variablen

Variable ausgeben:

PHPTemplate: <div class="content"><?php print $content; ?></div>
Twig: <div class="content">{{ content }}</div>

Element eines Hash-Key ausgeben [1]

PHPTemplate: <?php print $item['#item']['alt']; ?>
Twig: {{ item['#item'].alt }} 

Variable zuweisen:

PHPTemplate: <?php $custom_var = $content->comments; ?>
Twig: {% set custom_var = content.comments %}

Array zuweisen:

PHPTemplate: <?php $args = array('@author' => $author, '@date' => $created); ?>
Twig: {% set args = {'@author': author, '@date': created} %}

4. Bedingungen

PHPTemplate: <?php if ($content->comments): endif; ?>
Twig: {% if content.comments %} {% endif %}

PHPTemplate: <?php if (!empty($content->comments)): endif; ?>
Twig: {% if content.comments is not empty %} {% endif %}

PHPTemplate: <?php if (isset($content->comments)): endif; ?>
Twig: {% if content.comments is defined %} {% endif %}

PHPTemplate: <?php if ($count > 0): endif; ?>
Twig: {% if count > 0 %} {% endif %}

5. Kontrollstrukturen

PHPTemplate: <?php foreach ($users as $user) {} ?>
Twig: {% for user in users %} {% endfor %}

6. Filter

Escape von HTML-Sonderzeichen:

PHPTemplate: <?php print check_plain($title); ?>
Twig[2]: {{ title }}

Unverarbeitete Werte:

PHPTemplate: <?php print $title; ?>
Twig: {{ title|raw }}

Übersetzen:

PHPTemplate: <?php print t('Home'); ?>
Twig: {{ 'Home' | t }}

Übersetzen mit Platzhaltern:

PHPTemplate: <?php print t('Welcome, @username', array('@username' => $user->name)); ?>
Twig: {{ 'Welcome, @username'|t({ '@username': user.name }) }}

Drupal 8 Twig (mit trans tag extension):

{% set username = user.name %}
{% trans %}
  Welcome, {{ username }}
{% endtrans %}

Liste ausgeben:

PHPTemplate: <?php echo implode(',', $usernames); ?>
Twig: {{ usernames | join(', ') }}

Liste mit Markup ausgeben:

Twig: {{ usernames | safe_join(', ') }}

Im PHPTemplate-Beispiel muss $usernames ein Array von Strings sein. Gleiches gilt für das ursprüngliche Twig-Beispiel, bei dem „usernames“ ein Array von Strings ist. Im Drupal 8 Twig-Beispiel wird hingegen ein Array von Render-Arrays erwartet. Das ist ein wesentlicher Unterschied zwischen Drupal 8 Twig und dem Original Twig: Drupal 8 Twig „druckt“ sowohl einfachen Text als auch gerenderte Arrays.

Ein weiterer Punkt dieses Beispiels ist, dass alle drei Beispiele denselben Output liefern sollen, dies aber standardmäßig nicht tun. Beispiel:

{% set numbers = [{'#markup': 'One'}, {'#markup':'Two'}, {'#markup':'Three'}] %}
{{ numbers }}

Der obige Code würde erwarten, dass die Elemente mit Komma getrennt ausgegeben werden. Das Ergebnis ist jedoch: OneTwoThree

7. Steuerung von Leerzeichen

Twig bietet eine Leerzeichen-Kontrolle, mit der Leerzeichen, die zur Strukturierung des Templates dienen, entfernt werden können.

<div class="body">
  {{- block.content -}}
</div>

Das entspricht:

<div class="body">{{ block.content }}</div>

Achtung

Weitere Informationen:

Drupal’s online documentation is © 2000-2020 by the individual contributors and can be used in accordance with the Creative Commons License, Attribution-ShareAlike 2.0. PHP code is distributed under the GNU General Public License.