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, en respectant le namespace Cecil\Renderer\Extension :

extensions/Cecil/Renderer/Extension/MyTwigExtension.php

<?php
namespace Cecil\Renderer\Extension;

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

    public function getFunctions()
    {
        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 (la clé est un nom libre) :

layouts:
  extensions:
    MyExtension: Cecil\Renderer\Extension\MyTwigExtension

L’utiliser dans les templates

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