Les filtres Twig

Les filtres Twig sont appliqués aux variables Twig en utilisant le | caractère suivi du nom du filtre. Les paramètres peuvent être transmis comme les fonctions Twig en utilisant des parenthèses.

absolute_url

Prend un extrait de code HTML contenant un attribut src ou href qui utilise un chemin relatif. Convertit la chaîne de chemin d'accès en un format d'URL absolu, y compris le nom d'hôte.

<img src="/some/path/to/image.jpg"/>|absolute_url

array_unique

Wrapper pour PHP array_unique() qui supprime les doublons d'un tableau.

['foo', 'bar', 'foo', 'baz']|array_unique → Array ( [0] => foo [1] => bar [3] => baz )

base32_encode

Effectue un encodage base32 sur la variable 'some variable here'|base32-encode → ONXW2ZJAOZQXE2LBMJWGKIDIMVZGK

base32_decode

Effectue un décodage en base32 sur la variable 'ONXW2ZJAOZQXE2LBMJWGKIDIMVZGK'|base32_decode → some variable here

base64_encode

Effectue un encodage base64 sur la variable 'some variable here'|base64_encode → c29tZSB2YXJpYWJsZSBoZXJl

base64_decode

Effectue un décodage base64 sur la variable 'c29tZSB2YXJpYWJsZSBoZXJl'|base64_decode → some variable here

basename

Renvoie le nom de base d'un chemin.

'/etc/sudoers.d'|basename → sudoers.d

camelize

Convertit une chaîne au format "CamelCase"

'send_email'|camelize → SendEmaill

chunk_split

Divise une chaîne en plus petits morceaux d'une certaine taille

'ONXW2ZJAOZQXE2LBMJWGKIDIMVZGKA'|chunk_split(6, '-') → ONXW2Z-JAOZQX-E2LBMJ-WGKIDI-MVZGKA-

contains

Déterminer si une chaîne particulière contient une autre chaîne

'une chaîne avec des choses dedans'|contains('things') → 1

Casting Values

PHP 7 obtient des vérifications de type plus strictes, ce qui signifie que le passage d'une valeur de type incorrect peut désormais lever une exception. Pour éviter cela, vous devez utiliser des filtres qui garantissent que la valeur transmise à une méthode est valide :

string

Utilisez |string pour convertir la valeur en chaîne.

int

Utilisez |int pour convertir la valeur en entier.

bool

Utilisez |bool pour convertir la valeur en booléen.

float

Utilisez |float pour convertir la valeur en nombre à virgule flottante.

array

Utilisez |array pour transtyper la valeur dans un tableau.

defined

Parfois, vous voulez vérifier si une variable est définie, et si ce n'est pas le cas, fournissez une valeur par défaut. Par example:

set header_image_width = page.header.header_image_width|defined(900)

Cela définira la variable header_image_width sur la valeur 900 si elle n'est pas définie dans l'en-tête de la page.

dirname

Renvoie le dirname d'un chemin.

'/etc/sudoers.d'|dirname → /etc

ends_with

Prend une aiguille et une botte de foin et détermine si la botte de foin se termine par l'aiguille. Fonctionne également maintenant avec un tableau d'aiguilles et renverra true si une botte de foin se termine par l'aiguille.

'le renard brun rapide'|ends_with('fox') → true

fieldName

Filtre le nom du champ en changeant la notation par points en notation par tableau

'field.name'|fieldName field[name] → field[name]

gate_type

Obtient le type d'une variable :

page|get_type → object

humanize

Convertit une chaîne dans un format plus "lisible par l'homme"

'something_text_to_read'|humanise → something text to read

hyphenize

Convertit une chaîne en une version avec trait d'union.

'Something text to read'|hyphenize → something text to read

json_decode

Vous pouvez décoder JSON en appliquant simplement ce filtre :

array|json_decode

1 | {% set array = '{"first_name": "Guido", "last_name":"Rossum"}'|json_decode %}
2 | {{ print_r(array) }}
stdClass Object
(
    [first_name] => Guido
    [last_name] => Rossum
)
ksort

Trier une carte de tableau par chaque clé

array|ksort

1 | {% set items = {'orange':1, 'apple':2, 'peach':3}|ksort %}
2 | {{ print_r(items) }}
Array
(
    [apple] => 2
    [orange] => 1
    [peach] => 3
)
ltrim

'/strip/leading/slash/'|ltrim('/') → strip/leading/slash/

Trim gauche supprime les espaces de fin au début d'une chaîne. Il peut également supprimer d'autres caractères en définissant le masque de caractère (voir https://php.net/manual/en/function.ltrim.php)

markdown

Prenez une chaîne arbitraire contenant du démarquage et convertissez-la en HTML à l'aide de l'analyseur de démarquage de Grav. Paramètre boolean facultatif :

  • true (par défaut) : traiter comme un bloc (mode texte, le contenu sera enveloppé dans des balises <p>)
  • false : traiter comme une ligne (le contenu ne sera pas encapsulé)

string|markdown($is_block)

1 | <div class="div">
2 | {{ 'Un paragraphe avec **markdown** et [un lien](http://www.cnn.com)'|markdown }}
3 | </div>
4 |
5 | <p class="paragraph">{{'Une ligne avec **markdown** et [un lien](http://www.cnn.com)'|markdown(false)}}</p>
</p>
<div class="div">
<p>Un paragraphe avec <strong>markdown</strong> et <a href="http://www.cnn.com">un lien</a></p>
</div>
<p class="paragraph">Une ligne avec <strong>markdown</strong> et <a href="http://www.cnn.com">un lien</a></p>
<p>
md5

Crée un hachage md5 pour la chaîne

'n'importe quoi'|md5 → f0e166dc34d14d6c228ffac576c9a43c

modulus

Effectue la même fonctionnalité que le symbole Modulo % en PHP. Il fonctionne sur un nombre en transmettant un diviseur numérique et un tableau facultatif d'éléments à sélectionner.

7|modulus(3, ['rouge', 'bleu', 'vert']) → bleu

monthize

Convertit un nombre entier de jours en nombre de mois

'181'|monthize → 5

nicecron

Obtient une sortie lisible par l'homme pour la syntaxe cron

"2 * * * *"|nicecron → Toutes les heures à 2 minutes après l'heure

nicefilesize

Sortie d'une taille de fichier dans un format de bonne taille lisible par l'homme

612394|nicefilesize → 598,04 Ko

nicenumber

Générer un nombre dans un format de nombre gentil lisible par l'homme

12430|nicenumber → 12,43 k

nicetime

Afficher une date dans un format d'heure agréable lisible par l'homme

page.date|nicetime(false) → Il y a 4 mois

Le premier argument spécifie s'il faut utiliser une description de date au format complet. C'est true par défaut.

Vous pouvez fournir un deuxième argument de false si vous souhaitez supprimer le descripteur relatif au temps (comme « il y a » ou « à partir de maintenant » dans votre langue) du résultat.

of_type

Vérifie le type d'une variable au paramètre :

page|of_type('string') → false

ordinalise

Ajoute un ordinal à l'entier (tel que 1er, 2e, 3e, 4e)

'10'|ordinalize → 10

pad

Complète une chaîne à une certaine longueur avec un autre caractère. Il s'agit d'un wrapper pour la fonction PHP str_pad().

'foobar'|pad(10, '-') → foobar----

pluralize

Convertit une chaîne en version plurielle anglaise

'person'| → pluralize → les gens

pluralize prend également un paramètre numérique facultatif que vous pouvez transmettre lorsque vous ne savez pas à l'avance à combien d'éléments le nom fera référence. Sa valeur par défaut est 2, donc fournira la forme plurielle si elle est omise. Par example:

<p>We have {{ num_vacancies }} {{ 'vacancy'|pluralize(num_vacancies) }} right now.</p>

Imprime des informations lisibles par l'homme sur une variable

page.header|print_r

Objet stdClass
(
    [title] => Filtres Brindille
    [body_classes] => twig__headers
    [page-toc] => Tableau
        (
            [actif] => 1
            [début] => 3
            [profondeur] => 1
        )

    [processus] => Tableau
        (
            [brindille] => 1
        )

    [taxonomie] => Tableau
        (
            [catégorie] => docs
        )

    [métadonnées] => Tableau
        (
            [description] =>
            [générateur] => GravCMS
            [title] => Filtres Brindille
            [image] => https://webshot.getgrav.org/?url=aHR0cHM6Ly9sZWFybi5nZXRncmF2Lm9yZy8xNy90aGVtZXMvdHdpZy10YWdzLWZpbHRlcnMtZnVuY3Rpb25zL2ZpbHRlcnM=
            [robots] => tous
            [fb:app_id] =>
            [og:url] => https://learn.getgrav.org/17/themes/twig-tags-filters-functions/filters
            [og:site_name] => Documentation Grav
            [og:title] => Filtres Twig
            [og:description] =>
            [og:type] => article
            [og:image] => https://webshot.getgrav.org/?url=aHR0cHM6Ly9sZWFybi5nZXRncmF2Lm9yZy8xNy90aGVtZXMvdHdpZy10YWdzLWZpbHRlcnMtZnVuY3Rpb25zL2ZpbHRlcnM=
            [og:image:largeur] => 1200
            [og:image:hauteur] => 630
            [og:image:secure] => https://webshot.getgrav.org/?url=aHR0cHM6Ly9sZWFybi5nZXRncmF2Lm9yZy8xNy90aGVtZXMvdHdpZy10YWdzLWZpbHRlcnMtZnVuY3Rpb25zL2ZpbHRlcnM=
            [twitter:card] => summary_large_image
            [gazouillement:site] =>
            [twitter:title] => Filtres Twig
            [twitter:description] =>
            [twitter:image] => https://webshot.getgrav.org/?url=aHR0cHM6Ly9sZWFybi5nZXRncmF2Lm9yZy8xNy90aGVtZXMvdHdpZy10YWdzLWZpbHRlcnMtZnVuY3Rpb25zL2ZpbHRlcnM=
            [twitter:image:alt] => Filtres Twig
        )
)
randomize

Randomise la liste fournie. Si une valeur est fournie en tant que paramètre, il ignorera les n premières valeurs et les conservera dans l'ordre.

array|randomiser

1 | {% set ritems = ['one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten']|randomize(2) %}
2 | {{ print_r(ritems) }}
Array
(
    [0] => one
    [1] => two
    [2] => four
    [3] => seven
    [4] => ten
    [5] => three
    [6] => eight
    [7] => five
    [8] => nine
    [9] => six
)
regex_replace

Un wrapper utile pour la méthode PHP preg_replace(), vous pouvez effectuer des remplacements complexes de Regex sur du texte via ce filtre :

'The quick brown fox jumps over the lazy dog.'|regex_replace(['/quick/','/brown/','/fox/','/dog/'], ['slow','black', 'bear','turtle']) → The slow black bear jumps over the lazy turtle.

Utilisez le délimiteur ~ plutôt que le délimiteur / si possible. Sinon, vous devrez probablement double-échapper certains caractères. Par exemple ~\/\/#.*~ plutôt que '/\\/\\#.*/', qui se conforme plus étroitement à la syntaxe PCRE utilisée par PHP.
rtrim

'/strip/trailing/slash/'|rtrim('/') → /strip/trailing/slash

Supprime les espaces de fin à la fin d'une chaîne. Il peut également supprimer d'autres caractères en définissant le masque de caractère (voir https://php.net/manual/en/function.rtrim.php).

singularize

Convertit une chaîne en version anglaise singulière

'shoes'|singularize → shoe

safe_email

Le filtre de messagerie sécurisé convertit une adresse e-mail en caractères ASCII pour la rendre plus difficile à reconnaître et à capturer par les robots de spam.

"someone@domaine.com"|safe_email → somone@domaine.com

Exemple d'utilisation avec un lien mailto :

1 | <a href="mailto:{{ 'your.email@server.com'|safe_email }}">
2 |    Email me
3 | </a>

Vous ne remarquerez peut-être pas de différence au début, mais l'examen de la source de la page (sans utiliser les outils de développement du navigateur, la source de la page réelle) révélera l'encodage des caractères sous-jacents.

sort_by_key

Trier une carte de tableau par une clé particulière

array|sort_by_key

1 | {% set people = [{'email':'fred@yahoo.com', 'id':34}, {'email':'tim@exchange.com', 'id':21}, 
2 | {'email':'john@apple.com', 'id':2}]|sort_by_key('id') %}
3 | {% for person in people %}{{ person.email }}:{{ person.id }}, {% endfor %}

john@apple.com:2, tim@exchange.com:21, fred@yahoo.com:34,

starts_with

Prend une aiguille et une botte de foin et détermine si la botte de foin commence par l'aiguille. Fonctionne également maintenant avec un tableau d'aiguilles et renverra true si aucune botte de foin commence par l'aiguille.

'The quick brown fox'|starts_with('the') → true

titleize

Convertit une chaîne au format "Title Case"

'welcome page'|titleize → Welcome Page

t

Traduire une chaîne dans la langue courante

'MY_LANGUAGE_KEY_STRING'|t → 'Du texte en anglais'

Cela suppose que ces chaînes de langue sont traduites sur votre site et que vous avez activé la prise en charge de -language. Veuillez vous référer à la documentation multilingue pour des informations plus détaillées.

tu

Traduire une chaîne dans la langue actuelle définie dans les préférences utilisateur de l'interface d'administration

'MY_LANGUAGE_KEY_STRING'|tu → Quelque texte en anglais'

Cela utilise le champ de langue défini dans l'utilisateur yaml.

ta

Traduit un tableau avec une langue utilise le filtre |ta. Voir la documentation multilingue pour un exemple détaillé.

'MONTHS_OF_THE_YEAR'|ta(post.date|date('n') - 1) → april

tl

Traduit une chaîne dans une langue spécifique. Pour plus de détails, consultez la documentation multilingue.

'SIMPLE_TEXT'|tl(['en'])

truncate

Vous pouvez facilement générer une version raccourcie et tronquée d'une chaîne à l'aide de ce filtre. Il prend un certain nombre de caractères comme seul champ obligatoire, mais a quelques autres options :

'one sentence. two sentences'|truncate(5)|raw → one s…

Tronque simplement à 5 caractères.

'one sentence. two sentences'|truncate(5, true)|raw → one sentence.…

Le filtre |raw Twig doit être utilisé avec la valeur par défaut (points de suspension) élément de remplacement afin qu'il soit rendu avec l'échappement automatique de Twig.

Tronque à la fin de phrase la plus proche après 5 caractères.

Vous pouvez également tronquer le texte HTML, mais vous devez d'abord utiliser le filtre |striptags pour supprimer toute mise en forme HTML qui pourrait être endommagée si vous terminez entre des balises :

'<span>une <strong>sentence</strong>. deux phrases</span>' |raw|striptags|truncate(25) → one sentence. two sentenc…

Versions spécialisées :

safe_truncate

Utilisez |safe_truncate pour tronquer le texte par nombre de caractères d'une manière "word-safe".

truncate_html

Utilisez |truncate_html pour tronquer le code HTML par nombre de caractères. pas "mot-sûr" !

safe_truncate_html

Utilisez |safe_truncate_html pour tronquer le code HTML par nombre de caractères d'une manière « sans danger pour les mots ».

underscorize

Convertit une chaîne au format "under_scored"

'CamelCased'|underscorize → camel_cased

yaml_encode

Vider/encoder une variable dans la syntaxe YAML

1 | {% set array = {foo: [0, 1, 2, 3], baz: 'qux' } %}
2 | {{ array|yaml_encode }}
foo :
  - 0
  - 1
  - 2
  - 3
baz: qux
yaml_decode

Décoder/analyser une variable à partir de la syntaxe YAML

1 | {% set yaml = "foo: [0, 1, 2, 3]\nbaz: qux" %}
2 | {{ yaml|yaml_decode|var_dump }}
array(2) {
  ["foo"]=>
  array(4) {
    [0]=>
    int(0)
    [1]=>
    int(1)
    [2]=>
    int(2)
    [3]=>
    int(3)
  }
  ["baz"]=>
  string(3) "qux"
}