Sur cette page
Créer un générateur de pages personnalisé
Un générateur de pages crée des pages sans fichier Markdown (par exemple à partir d’une API ou d’une base de données), ou modifie des pages existantes. Cecil utilise ses propres générateurs pour construire les sections, les taxonomies, la pagination, etc., et vous pouvez ajouter les vôtres.
Créer la classe du générateur
Ajoutez une classe PHP dans le répertoire extensions de votre site, dans le namespace Cecil\Generator. Elle étend AbstractGenerator, implémente GeneratorInterface et ajoute des pages à $this->generatedPages dans la méthode generate().
L’exemple suivant crée une page pour chaque élément renvoyé par une API JSON :
extensions/Cecil/Generator/Posts.php
<?php
namespace Cecil\Generator;
use Cecil\Collection\Page\Page;
use Cecil\Collection\Page\Type;
class Posts extends AbstractGenerator implements GeneratorInterface
{
public function generate(): void
{
$posts = json_decode(file_get_contents('https://jsonplaceholder.typicode.com/posts'), true) ?? [];
foreach ($posts as $post) {
$page = (new Page("posts/{$post['id']}"))
->setType(Type::PAGE)
->setPath("posts/{$post['id']}")
->setSection('posts')
->setBodyHtml('<p>' . htmlspecialchars($post['body']) . '</p>')
->setVariable('title', $post['title']);
$this->generatedPages->add($page);
}
}
}
Déclarer le générateur
Ajoutez le nom de la classe à la liste pages.generators dans cecil.yml, avec une priorité comme clé :
pages:
generators:
35: Cecil\Generator\Posts
Les générateurs sont exécutés par ordre de priorité croissant. Ceux fournis par Cecil utilisent les priorités 10 (DefaultPages) à 90 (Redirect) : avec 35, les pages sont créées avant les sections (40) et, grâce à setSection(), sont donc regroupées dans la section posts, comme les pages issues de fichiers Markdown.
Générer le site
php cecil.phar build
Les pages sont désormais disponibles aux adresses /posts/1/, /posts/2/, etc., rendues avec les templates page par défaut.