logo

Extra Block Types (EBT) - Nieuwe Layout Builder ervaring❗

Extra Block Types (EBT) - gestileerde, aanpasbare bloktypes: Slideshows, Tabs, Cards, Accordions en vele andere. Ingebouwde instellingen voor achtergrond, DOM Box, javascript-plugins. Ervaar vandaag al de toekomst van layout building.

Demo EBT-modules Download EBT-modules

❗Extra Paragraph Types (EPT) - Nieuwe Paragraphs ervaring

Extra Paragraph Types (EPT) - analoge op paragrafen gebaseerde set modules.

Demo EPT-modules Download EPT-modules

Scroll

Vergelijking van de PHPTemplate- en Twig-paradigma’s

03/10/2025, by Ivan

Menu

Over Twig

Twig is een gecompileerde template-taal gebaseerd op PHP. Wanneer je webpagina wordt weergegeven, neemt de Twig-engine het sjabloon en zet dit om in een “gecompileerd” PHP-sjabloon dat wordt opgeslagen in een beveiligde map op sites/default/files/php/twig. De compilatie gebeurt één keer, sjabloonbestanden worden gecachet voor hergebruik en opnieuw gecompileerd bij het legen van de Twig-cache.

De Drupal Twig-initiatie heeft dezelfde motivatie als de Symfony-initiatie: een moderne, krachtige, OOP-gebaseerde engine introduceren die ontwikkelaars helpt zich op de juiste manier op Drupal te concentreren.

1. Docblock

PHPTemplate:

<?php 
/** 
 * @file
 * File description
 */
?>

Twig:

{# 
/** 
 * @file
 * File description
 */
#}

2. Bestands- en functienamen

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

PHPTemplate-functie: THEME_node_links()
Twig-bestand: node-links.html.twig

3. Variabelen

Een variabele printen:

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

Een hash-sleutelelement printen [1]

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

Een variabele toewijzen:

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

Een array toewijzen:

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

4. Condities

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

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

6. Filters

Geëscapede HTML-tekens:

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

Onbewerkte waarden:

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

Vertalen:

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

Vertalen met plaatsvervangers:

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

Drupal 8 Twig (met trans tag extension):

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

Lijst samenvoegen:

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

Lijst samenvoegen met markup:

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

In het PHPTemplate-voorbeeld moet $usernames een array van strings zijn. Hetzelfde geldt voor het oorspronkelijke Twig-voorbeeld, waar “usernames” een array van strings is. Aan de andere kant verwacht het Drupal 8 Twig-voorbeeld een array van renderbare items. Dit is een fundamenteel verschil tussen Drupal 8 Twig en origineel Twig. Drupal 8 Twig kan zowel platte tekst als render-arrays “printen”.

Een ander aspect van dit voorbeeld is dat verwacht wordt dat alle drie de voorbeelden dezelfde uitvoer produceren, maar dit gebeurt standaard niet. Bijvoorbeeld:

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

Bovenstaand voorbeeld suggereert dat de items door komma’s gescheiden worden geprint. Maar de uitvoer is: OneTwoThree

7. Spatiebeheer

Twig heeft whitespace-controle waarmee je spaties kunt verwijderen die gebruikt worden om het sjabloonbestand te structureren.

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

Dit is hetzelfde als:

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

Let op

  • Het hash-sleutelelement-voorbeeld kan in de toekomst veranderen
  • In het tweede voorbeeld laten we zien dat Twig verantwoordelijk is voor het opschonen van data. Voorheen moest dit gebeuren in het sjabloonbestand of in de preprocess-functie. Deze laatste wijziging is belangrijk voor iedereen die hoopt een PHPTemplate-thema naar Drupal 8 om te zetten – je moet je eigen data opschonen. ↩︎︎

Voor meer informatie zie: