Logo de Cecil Cecil
Sur cette page

Pages

Ces options contrôlent la façon dont les pages sont chargées, triées, paginées, routées et générées.

pages.dir

Répertoire source des pages (pages par défaut).

pages:
  dir: pages

pages.ext

Extensions des fichiers de pages.

pages:
  ext: [md, markdown, mdown, mkdn, mkd, text, txt]

pages.exclude

Répertoires, chemins et noms de fichiers à exclure (accepte les globs, les chaînes et les expressions régulières).

pages:
  exclude: ['vendor', 'node_modules', '*.scss', '/\.bck$/']

pages.prefix.separator

Liste des caractères utilisés comme séparateur entre un préfixe de nom de fichier (date ou weight) et le slug.

pages:
  prefix:
    separator: ['-', '_']

pages.sortby

Méthode de tri par défaut des collections.

pages:
  sortby: date # `date`, `updated`, `title` ou `weight`
  # ou
  sortby:
    variable: date    # `date`, `updated`, `title` ou `weight`
    desc_title: false # tri par titre décroissant
    reverse: false    # inverse l’ordre de tri

pages.pagination

La pagination est disponible pour les pages de liste (type homepage, section ou term).

pages:
  pagination:
    max: 5     # nombre maximum d’entrées par page
    path: page # chemin de la page paginée

Désactiver la pagination

La pagination peut être désactivée :

pages:
  pagination: false

Ou :

pages:
  pagination:
    enabled: false

pages.paths

Applique un path personnalisé à toutes les pages d’une section.

pages:
  paths:
    - section: <section’s ID>
      path: <path of pages>

Variables de chemin

  • :year
  • :month
  • :day
  • :section
  • :slug

Exemple :

pages:
  paths:
    - section: Blog
      path: :section/:year/:month/:day/:slug # ex. : /blog/2020/12/01/my-post/
# localized
languages:
  - code: fr
    name: Français
    locale: fr_FR
    config:
      pages:
        paths:
          - section: Blog
            path: blogue/:year/:month/:day/:slug # ex. : /blogue/2020/12/01/mon-billet/

pages.frontmatter

Format du front matter des pages (yaml par défaut, accepte aussi ini, toml et json).

pages:
  frontmatter: yaml

pages.body

Options du corps des pages.

pages.body.toc

En-têtes utilisés pour construire la table des matières ([h2, h3] par défaut).

pages:
  body:
    toc: [h2, h3]

pages.body.anchors

Titres avec un lien d’ancre ([h2, h3] par défaut) : un élément <a class="heading-anchor" href="#<id>"> vide est ajouté à la fin de chacun de ces titres ayant un ID, pour être stylé par les templates (ex. : un # affiché au survol).

pages:
  body:
    anchors: [h2, h3] # false pour désactiver les ancres

pages.body.highlight

Active la coloration syntaxique du code (true par défaut).

pages:
  body:
    highlight: false # `false` pour désactiver la coloration syntaxique

Le moteur de coloration peut être changé avec l’option engine :

pages:
  body:
    highlight:
      enabled: true    # `true` par défaut
      engine: tempest  # `highlightjs` (par défaut) ou `tempest`
  • highlightjs : highlight.php, un portage PHP de highlight.js (plus de 190 langages, classes CSS hljs-*)
  • tempest : tempest/highlight, un moteur de coloration rapide côté serveur (langages du web : PHP, HTML, CSS, JavaScript, JSON, YAML, Twig, SQL, XML, etc., classes CSS hl-*)

pages.body.images

Options de gestion des images.

pages:
  body:
    images:
      formats: []       # ajoute des formats d’image alternatifs comme `source` (ex. `[avif, webp]`, tableau vide par défaut)
      resize: 0         # redimensionne toutes les images à <width> (en pixels, `0` pour désactiver)
      responsive: false # ajoute des variantes responsives à l’attribut `srcset` (`false` par défaut)
      lazy: true        # ajoute l’attribut `loading="lazy"` (`true` par défaut)
      decoding: true    # ajoute l’attribut `decoding="async"` (`true` par défaut)
      caption: false    # place l’image dans un élément <figure> et ajoute une <figcaption> contenant le titre (`false` par défaut)
      placeholder: ''   # remplit l’arrière-plan de <img> avant le chargement ('color' ou 'lqip', vide par défaut)
      class: ''         # définit une classe par défaut sur chaque image (vide par défaut)
      dark_suffix: ~    # suffixe de l’image variante sombre (ex. `.dark`), désactivé par défaut
      mobile_suffix: ~  # suffixe de l’image variante mobile (ex. `.mobile`), désactivé par défaut
      mobile_media_query: '(max-width: 767px)' # media query de la `<source>` de la variante mobile
      remote:           # traitement des images distantes (mettre à `false` pour désactiver)
        fallback:         # chemin de l’image de secours, stockée dans le répertoire assets (vide par défaut)

Options de gestion des liens.

pages:
  body:
    links:
      embed:
        enabled: false     # transforme les liens en contenu embarqué si possible (`false` par défaut)
        video: [mp4, webm] # extensions des fichiers vidéo
        audio: [mp3, ogg, wav] # extensions des fichiers audio
      external:
        blank: false     # si `true`, ouvre le lien externe dans un nouvel onglet
        noopener: true   # si `true`, ajoute `noopener` à l’attribut `rel`
        noreferrer: true # si `true`, ajoute `noreferrer` à l’attribut `rel`
        nofollow: false  # si `true`, ajoute `nofollow` à l’attribut `rel`

pages.body.excerpt

Options de gestion des extraits.

pages:
  body:
    excerpt:
      separator: excerpt|break # chaîne utilisée comme séparateur (`excerpt|break` par défaut)
      capture: before          # partie à capturer, `before` ou `after` le séparateur (`before` par défaut)

pages.default

Les pages par défaut sont des pages sans fichier de contenu (front matter uniquement), indexées par ID, chacune avec un path et quelques variables de front matter.

Cecil fournit des pages par défaut intégrées (à partir de templates intégrés) :

pages:
  default:
    index:
      path: ''
      title: Home
      published: true
    404:
      path: 404
      title: Page not found
      layout: 404
      uglyurl: true
      published: true
      excluded: true
    robots:
      path: robots
      title: Robots.txt
      layout: robots
      output: txt
      published: true
      excluded: true
      multilingual: false
    sitemap:
      path: sitemap
      title: XML sitemap
      layout: sitemap
      output: xml
      changefreq: monthly
      priority: 0.5
      published: true
      excluded: true
      multilingual: false
    xsl/sitemap:
      path: xsl/sitemap
      layout: sitemap
      output: xsl
      uglyurl: true
      published: true
      excluded: true
    xsl/atom:
      path: xsl/atom
      layout: feed
      output: xsl
      uglyurl: true
      published: true
      excluded: true
    xsl/rss:
      path: xsl/rss
      layout: feed
      output: xsl
      uglyurl: true
      published: false
      excluded: true

Chaque page peut être :

  1. désactivée : published: false
  2. exclue des pages de liste : excluded: true
  3. exclue de la localisation : multilingual: false

Vous pouvez aussi ajouter vos propres pages (un thème peut faire de même dans son config.yml) :

pages:
  default:
    code:
      path: code
      redirect: https://github.com/ArnaudLigny

Comme toute autre page, une page par défaut est listée (par exemple dans site.pages.showable, dans le sitemap, sur la page d’accueil) : utilisez excluded: true pour exclure des listes une page technique (index JSON, manifeste, etc.).

pages.generators

Cecil utilise les générateurs pour créer des pages supplémentaires (par ex. sitemap, flux, pagination, etc.) à partir de pages existantes, ou à partir d’autres sources comme le fichier de configuration ou des sources externes.

Voici la liste des générateurs fournis par Cecil, dans un ordre défini :

pages:
  generators:
    10: 'Cecil\Generator\DefaultPages'
    30: 'Cecil\Generator\ExternalBody'
    40: 'Cecil\Generator\Section'
    50: 'Cecil\Generator\Taxonomy'
    60: 'Cecil\Generator\Homepage'
    70: 'Cecil\Generator\Pagination'
    80: 'Cecil\Generator\Alias'
    90: 'Cecil\Generator\Redirect'

pages.subsets

Les sous-ensembles servent à générer une partie de la collection de pages, selon un chemin, une langue ou un format de sortie spécifique, avec la commande :

cecil build --render-subset=<name>
pages:
  subsets:
    <name>:
      path: <path> # chemin glob ou chaîne (ex. `blog/*`, `blog`)
      language: <language> # code de langue (ex. `en`, `fr`)
      output: <output> # format de sortie (ex. `html`, `atom`)

Exemple :

pages:
  subsets:
    blog_en:
      path: blog
      language: en
      output: html
    search_index:
      path: '*'
      output: json