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>