Filtres - Modification des variables dans les templates Twig
Les filtres dans Twig peuvent être utilisés pour modifier des variables. Les filtres sont séparés de la variable par le symbole pipe. Ils peuvent avoir des arguments optionnels entre parenthèses. Plusieurs filtres peuvent être chaînés. La sortie d'un filtre est appliquée au suivant.
Exemple :
{{ content|safe_join(", ")|lower }}
Il se peut que vous deviez rendre un élément avant de l'appliquer à un filtre :
{{ item|render|filter }}
Twig est fourni avec de nombreux filtres intégrés que vous pouvez consulter dans leur documentation officielle. Drupal possède de nombreux filtres propres.
Filtres spéciaux Drupal
Ils sont déclarés dans TwigExtension::getFilters().
Filtres de traduction
trans
Ce filtre (ou alternativement, t) fera passer la variable par la fonction Drupal t(), qui renverra la chaîne traduite. Ce filtre doit être utilisé pour toutes les chaînes d’interface placées manuellement dans un template destiné à être affiché aux utilisateurs.
Exemple :
<a href="{{ url('<front>') }}" title="{{ 'Accueil'|t }}" rel="home" class="site-logo"></a>
placeholder
Ce filtre échappe le contenu en HTML et le formate via drupal_placeholder(), ce qui permet d’afficher du texte mis en évidence.
Exemple :
{% trans %}Soumis le {{ date|placeholder }}{% endtrans %}
Traduction non sécurisée
Certains templates sont non sécurisés et ne doivent pas être utilisés, car ils transmettent la variable directement à la traduction. Cela gonfle non seulement la liste des chaînes à traduire, mais constitue également une faille potentielle, surtout si la sortie peut provenir d’un utilisateur. Quelques exemples de mauvaises pratiques de traduction :
{# NE PAS FAIRE ÇA #} {{ var1|t }} {{ var1|placeholder }} {% trans %}{{ var1 }}{% endtrans %}
Filtres supplémentaires
clean_class
Ce filtre prépare une chaîne pour être utilisée comme un nom de classe HTML valide. Voir Html::getClass()
clean_id
Ce filtre prépare une chaîne pour être utilisée comme un identifiant HTML valide. Voir Html::getID()
format_date
Ce filtre prépare un timestamp pour être utilisé comme une chaîne de date formatée. Voir DateFormatter::format()
raw
Ce filtre doit être évité autant que possible, surtout si vous affichez des données pouvant provenir d’un utilisateur. Voir cette page pour plus d’informations sur l’échappement automatique dans Drupal 8.
render
Ce filtre est un wrapper autour de la fonction render(). Il prend un tableau de rendu et renvoie le HTML rendu. Cela peut être utile si vous souhaitez appliquer un filtre supplémentaire (par exemple, le parsing de balises), ou si vous souhaitez faire une condition basée sur la sortie rendue (par exemple, si vous avez un tableau de rendu non vide qui renvoie une chaîne vide). Il peut aussi être utilisé pour des chaînes et certains objets, principalement ceux qui implémentent la méthode toString().
safe_join
Le filtre safe_join concatène plusieurs chaînes avec un séparateur fourni. Voir TwigExtension::safeJoin().
Exemple :
{{ items|safe_join(', ') }}
Cela affichera chaque chaîne dans la variable items, jointe ensemble avec une virgule séparant chaque élément.
without
Le filtre without crée une copie du tableau de rendu et retire les éléments enfants par clé indiquée dans les arguments passés au filtre. La copie peut être imprimée sans ces éléments. Le tableau de rendu original reste disponible et peut être utilisé pour afficher complètement les éléments enfants dans le template de branche. Voir twig_without.
Exemples :
{{ content|without('links') }}
Cela imprime tout dans la variable content sauf content.links.
{{ content|without('links', 'field_some_data') }}
Exemple d’exclusion de deux éléments du rendu. Cela exclura « links » et « field_some_data ».