Logo de Cecil Cecil
Sur cette page

Ajouter une fonction ou un filtre Twig personnalisé

Cecil fournit de nombreuses fonctions et de nombreux filtres de template, mais vous pouvez ajouter les vôtres avec une extension Twig écrite en PHP.

Créer la classe de l’extension

Ajoutez un fichier PHP dans le répertoire extensions de votre site, avec votre propre namespace (ex. : MySite\Twig, le namespace Cecil\ étant réservé), le chemin du fichier correspondant au namespace :

extensions/MySite/Twig/MyTwigExtension.php

<?php
namespace MySite\Twig;

class MyTwigExtension extends \Twig\Extension\AbstractExtension
{
    public function getFilters(): array
    {
        return [
            // {{ 'text'|md5 }}
            new \Twig\TwigFilter('md5', 'md5'),
            // {{ page.content|word_count }}
            new \Twig\TwigFilter('word_count', [$this, 'wordCount']),
        ];
    }

    public function getFunctions(): array
    {
        return [
            // {{ year() }}
            new \Twig\TwigFunction('year', fn () => date('Y')),
        ];
    }

    public function wordCount(string $html): int
    {
        return str_word_count(strip_tags($html));
    }
}

Déclarer l’extension

Ajoutez le nom de la classe à la liste layouts.extensions dans cecil.yml, indexée par un nom de votre choix :

layouts:
  extensions:
    MyExtension: MySite\Twig\MyTwigExtension

L’utiliser dans les templates

<p>{{ page.content|word_count }} words</p>
<footer>© {{ year() }} {{ site.title }}</footer>