Logo de Cecil Cecil
Sur cette page

Organiser les pages avec des tags et des catégories

Les taxonomies permettent de classer les pages avec des termes (par exemple PHP) regroupés dans des vocabulaires (par exemple tags). Cecil génère ensuite une page par vocabulaire et une page par terme.

Déclarer les vocabulaires

Les vocabulaires sont déclarés dans cecil.yml, par paires de noms au pluriel et au singulier :

taxonomies:
  categories: category
  tags: tag

Classer les pages

Ajoutez les termes dans le front matter de vos pages, en utilisant le nom au pluriel du vocabulaire :

---
title: Mon premier billet
categories: ["Development"]
tags: ["PHP", "Static site"]
---

Cecil génère :

  • /tags/ : la liste des termes du vocabulaire
  • /tags/php/ et /tags/static-site/ : la liste des pages de chaque terme

Personnaliser la liste des termes

Le template de vocabulaire est nommé d’après le pluriel, par exemple layouts/taxonomy/tags.html.twig :

{% extends 'page.html.twig' %}

{% block content %}
  <h1>{{ page.title }}</h1>
  <ul>
  {% for term in page.terms %}
    <li><a href="{{ url(term.id, {language: site.language}) }}">{{ term.name }}</a> ({{ term|length }})</li>
  {% endfor %}
  </ul>
{% endblock %}

Personnaliser les pages d’un terme

Le template de terme est nommé d’après le singulier, par exemple layouts/taxonomy/tag.html.twig :

{% extends 'page.html.twig' %}

{% block content %}
  <h1>{{ page.title }}</h1>
  {% for p in page.paginator.pages ?? page.pages %}
    <article>
      <h2><a href="{{ url(p) }}">{{ p.title }}</a></h2>
    </article>
  {% endfor %}
  <a href="{{ url(page.plural, {language: site.language}) }}">All {{ page.plural }}</a>
{% endblock %}

Afficher les termes d’une page

Dans un template de page, liez chaque terme à sa page :

{% for tag in page.tags ?? [] %}
  <a href="{{ url('tags/' ~ tag, {language: site.language}) }}">{{ tag }}</a>
{% endfor %}

L’option language conserve la langue courante dans les liens d’un site multilingue.

Ou utilisez le partial intégré : {{ include('partials/terms-list.html.twig', {vocabulary: 'tags'}) }}.