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 (ex. PHP) regroupés dans des vocabulaires (ex. 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, ex. 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) }}">{{ 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, ex. 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) }}">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) }}">{{ tag }}</a>
{% endfor %}

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