Logo de Cecil Cecil
Sur cette page

Variables

L’application transmet des variables aux templates pour qu’ils puissent les manipuler. Les variables peuvent également avoir des attributs ou des éléments auxquels vous pouvez accéder. Utilisez un point (.) pour accéder aux attributs d’une variable : {{ foo.bar }}

Vous pouvez utiliser des variables de différentes portées : site, page, cecil.

site

La variable site contient des variables intégrées et celles définies dans la configuration.

Variable Description
site.pages Collection de toutes les pages, dans la langue actuelle.
site.allpages Collection de toutes les pages, dans toutes les langues.
site.page(id) La page ayant l’ID donné.
site.taxonomies Collection des vocabulaires.
site.home ID de la page d’accueil.
site.time Timestamp actuel.
site.debug État du mode debug (true ou false).
site.build ID de la génération actuelle.

Exemple :

title: "My amazing website!"

Peut être affiché dans un template avec :

{{ site.title }}

Bouclez sur site.menus.<menu> pour obtenir chaque entrée de la collection <menu> (ex. : main).

Variable Description
<entry>.id ID de l’entrée (pour une entrée de page : l’ID de la page sans préfixe de langue).
<entry>.name Nom de l’entrée.
<entry>.url URL de l’entrée.
<entry>.weight Poids de l’entrée (utile pour trier les entrées de menu).

Exemple :

<nav>
  <ol>
  {% for entry in site.menus.main|sort_by_weight %}
    <li><a href="{{ url(entry.url) }}" data-weight="{{ entry.weight }}">{{ entry.name }}</a></li>
  {% endfor %}
  </ol>
</nav>

site.language

Informations sur la langue actuelle.

Variable Description
site.language Code de langue (ex. : en).
site.language.name Nom de la langue (ex. : English).
site.language.locale Code de locale de la langue (ex. : en_US).
site.language.weight Position de la langue dans la liste languages.

site.static

La collection des fichiers statiques est accessible via site.static si le static load est activé.

Chaque fichier expose les propriétés suivantes :

  • file : chemin relatif du fichier, tel que trouvé dans le répertoire static/ (ex. : images/img-1.jpg)
  • path : chemin relatif, avec des barres obliques (ex. : images/img-1.jpg)
  • date : date de création (DateTime)
  • updated : date de modification (DateTime)
  • name : nom (ex. : img-1.jpg)
  • basename : nom sans extension (ex. : img-1)
  • ext : extension (ex. : jpg)
  • type : type de média (ex. : image)
  • subtype : sous-type de média (ex. : image/jpeg)
  • exif : données EXIF de l’image (array)
  • audio : objet Mp3Info
  • video : tableau d’informations vidéo de base (durée en secondes, largeur et hauteur)

site.data

Une collection de données est accessible via site.data.<filename> (sans extension de fichier).

Exemples :

  • data/authors.yml : site.data.authors
  • data/authors.fr.yml : site.data.authors (si site.language = « fr »)
  • data/galleries/gallery-1.json : site.data.galleries['gallery-1']

page

La variable page contient les variables intégrées d’une page et celles définies dans le front matter.

Variable Description Exemple
page.id Identifiant unique. blog/post-1
page.title Nom du fichier (sans extension). Post 1
page.date Date de création du fichier. DateTime
page.body Corps du fichier. Markdown
page.content Corps du fichier converti en HTML. HTML
page.section Dossier racine du fichier (slugifié). blog
page.path Chemin du fichier (slugifié). blog/post-1
page.slug Nom du fichier (slugifié). post-1
page.filepath Chemin dans le système de fichiers. Blog/Post 1.md
page.type homepage, page, section, vocabulary ou term. page
page.pages Collection de toutes les sous-pages. Collection
page.translations Collection des pages traduites. Collection

Sections imbriquées

Dans un contexte de sections imbriquées, les propriétés page.parent, page.ancestors, page.sections et page.toplevel facilitent la construction de la navigation.

Variable Description Exemple
page.parent Page de la section parente (null si aucune). Page
page.ancestors Collection des sections ancêtres (la plus proche en premier). Collection
page.sections Collection des sections descendantes immédiates. Collection
page.toplevel true si la page est une section de premier niveau. Boolean

Fil d’Ariane (de la page d’accueil à la page courante) :

<nav aria-label="breadcrumb">
  <ul>
    <li><a href="{{ url(site.home) }}">{{ site.title }}</a></li>
    {% for section in page.ancestors|reverse %}
    <li><a href="{{ url(section) }}">{{ section.title }}</a></li>
    {% endfor %}
    {% if page.id != site.home %}
    <li><a href="{{ url(page) }}" aria-current="page">{{ page.title }}</a></li>
    {% endif %}
  </ul>
</nav>

Menu des sous-sections (sections descendantes immédiates de la section courante) :

{% if page.sections|length %}
<ul>
  {% for section in page.sections|sort_by_title %}
  <li><a href="{{ url(section) }}">{{ section.title }}</a></li>
  {% endfor %}
</ul>
{% endif %}

Navigation principale limitée aux sections de premier niveau (depuis n’importe quelle page) :

<nav>
  {% for section in site.page(site.home).sections|sort_by_title %}
  <a href="{{ url(section) }}">{{ section.title }}</a>
  {% endfor %}
</nav>

Lien vers la section parente :

{% if page.parent %}
<a href="{{ url(page.parent) }}">← {{ page.parent.title }}</a>
{% endif %}

page.<prev/next>

Navigation entre les pages d’une même Section, triées selon le sortby de la section (ordre chronologique pour les dates).

Avec des sous-sections, la navigation suit l’arbre des sections : les pages d’une Section de premier niveau et de toutes ses sous-sections sont enchaînées, chaque sous-section (sa page d’index) étant placée parmi les pages de sa Section parente et suivie de ses propres pages.

Variable Description Exemple
page.prev Page précédente. Page
page.next Page suivante. Page

Exemple :

{% if page.prev is defined %}
<a href="{{ url(page.prev) }}">{{ page.prev.title }}</a>
{% endif %}

page.paginator

Le paginator vous aide à créer la navigation des pages de liste : page d’accueil, sections et taxonomies.

Variable Description
page.paginator.pages Collection de pages.
page.paginator.pages_total Nombre total de pages.
page.paginator.count Nombre de pages du paginator.
page.paginator.current Index de position de la page actuelle.
page.paginator.links.first ID de la première page.
page.paginator.links.prev ID de la page précédente.
page.paginator.links.self ID de la page actuelle.
page.paginator.links.next ID de la page suivante.
page.paginator.links.last ID de la dernière page.
page.paginator.links.path ID de la page sans l’index de position.

Exemple :

{% if page.paginator %}
<div>
  {% if page.paginator.links.prev is defined %}
  <a href="{{ url(page.paginator.links.prev) }}">Previous</a>
  {% endif %}
  {% if page.paginator.links.next is defined %}
  <a href="{{ url(page.paginator.links.next) }}">Next</a>
  {% endif %}
</div>
{% endif %}

Exemple :

{% if page.paginator %}
<div>
  {% for paginator_index in 1..page.paginator.count %}
    {% if paginator_index != page.paginator.current %}
      {% if paginator_index == 1 %}
  <a href="{{ url(page.paginator.links.first) }}">{{ paginator_index }}</a>
      {% else %}
  <a href="{{ url(page.paginator.links.path ~ '/' ~ paginator_index) }}">{{ paginator_index }}</a>
      {% endif %}
    {% else %}
  {{ paginator_index }}
    {% endif %}
  {% endfor %}
</div>
{% endif %}

Taxonomie

Variables disponibles dans les templates vocabulary et term.

Vocabulaire

Page /<plural>/ (ex. : /categories/).

Variable Description
page.plural Nom du vocabulaire au pluriel.
page.singular Nom du vocabulaire au singulier.
page.terms Liste des termes (Collection).

Chaque terme de page.terms fournit term.id (identifiant du terme, ex. : categories/php), term.name (nom du terme, ex. : PHP) et le nombre de ses pages avec term|length.

Terme

Page /<plural>/<term>/ (ex. : /categories/php/).

Variable Description
page.title Nom du terme.
page.term Identifiant du terme (ex. : categories/php).
page.plural Nom du vocabulaire au pluriel.
page.singular Nom du vocabulaire au singulier.
page.pages Liste des pages de ce terme, triées par date (Collection).

Exemple de taxonomie

Configuration :

taxonomies:
  categories: category

Front matter d’une page :

---
categories: ["Data Sovereignty"]
---

Liste des termes (/categories/), dans layouts/taxonomy/categories.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 %}

Liste des pages d’un terme (/categories/data-sovereignty/), dans layouts/taxonomy/category.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) }}">Toutes les {{ page.plural }}</a>
{% endblock %}

Liens vers les termes de la page courante, dans un template de page :

{% for category in page.categories ?? [] %}
  <a href="{{ url('categories/' ~ category) }}">{{ category }}</a>
{% endfor %}

cecil

Variable Description
cecil.url URL du site de Cecil.
cecil.version Version actuelle de Cecil.
cecil.poweredby Affiche Cecil v%s, où %s est la version actuelle.