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>