Sur cette page
Configuration
Aperçu
La configuration du site web est définie dans un fichier YAML nommé cecil.yml ou config.yml, stocké à la racine :
<mywebsite>
└─ cecil.yml Cecil propose de nombreuses options de configuration, mais ses valeurs par défaut sont souvent suffisantes. Un nouveau site ne nécessite que ces paramètres :
title: "My new Cecil site"
baseurl: https://mywebsite.com/
description: "Site description" La documentation ci-dessous couvre toutes les options de configuration prises en charge par Cecil.
Options
title
Titre principal du site.
title: "<site title>" baseline
Description courte (~ 20 caractères).
baseline: "<baseline>" baseurl
URL de base.
baseurl: <url> Exemple :
baseurl: http://localhost:8000/ canonicalurl
Si la valeur est true, la fonction url() renverra l’URL absolue (false par défaut).
canonicalurl: <true|false> # false by default description
Description du site (~ 250 caractères).
description: "<description>" menus
Les menus sont utilisés pour créer des liens de navigation dans les templates.
Un menu est composé d’un identifiant unique et des propriétés des entrées (nom, URL, poids).
menus:
<name>:
- id: <unique-id> # unique identifier (required)
name: "<name>" # name displayed in templates
url: <url> # relative or absolute URL
weight: <integer> # integer value used to sort entries (lighter first) Exemple :
menus:
main:
- id: about
name: "About"
url: /about/
weight: 1
footer:
- id: author
name: The author
url: https://arnaudligny.fr
weight: 99 Surcharger une entrée
Une entrée de menu de page peut être surchargée : utilisez l’ID de la page comme id.
Exemple :
menus:
main:
- id: index
name: "My amazing homepage!"
weight: 1 Désactiver une entrée
Une entrée de menu peut être désactivée avec enabled: false.
Exemple :
menus:
main:
- id: about
enabled: false taxonomies
Liste des vocabulaires, associant une valeur au pluriel à une valeur au singulier.
taxonomies:
<plural>: <singular> Exemple :
taxonomies:
categories: category
tags: tag Vous pouvez ensuite utiliser ces vocabulaires dans le front matter de votre contenu.
theme
Thème à utiliser, ou liste de thèmes.
theme: <theme> # theme name
# or
theme:
- <theme1> # theme name
- <theme2> Exemples :
theme: hyde theme:
- serviceworker
- hyde date
Format de date et fuseau horaire.
date:
format: <format> # date format (optional, `F j, Y` by default)
timezone: <timezone> # date timezone (optional, local time zone by default) format: spécificateur de format de date PHPtimezone: voir les fuseaux horaires
Exemple :
date:
format: 'j F, Y'
timezone: 'Europe/Paris' language
Langue principale, définie par son code.
language: <code> # unique code (`en` by default) Par défaut, seuls les chemins des pages des autres langues sont préfixés par leur code de langue, mais vous pouvez préfixer le chemin des pages de la langue principale avec l’option suivante :
#language: <code>
language:
code: <code>
prefix: true languages
Options des langues disponibles, utilisées pour la localisation des pages et des templates.
languages:
- code: <code> # unique code (e.g.: `en`, `fr`, 'en-US', `fr-CA`)
name: <name> # human readable name (e.g.: `Français`)
locale: <locale> # locale code (`language_COUNTRY`, e.g.: `en_US`, `fr_FR`, `fr_CA`)
enabled: <true|false> # enabled or not (`true` by default) Exemple :
language: en
languages:
- code: en
name: English
locale: en_US
- code: fr
name: Français
locale: fr_FR Localiser
Pour localiser des options de configuration, vous devez les stocker sous la clé config de la langue.
Exemple :
title: "Cecil in english"
languages:
- code: en
name: English
locale: en_US
- code: fr
name: Français
locale: fr_FR
config:
title: "Cecil en français" 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: ['-', '_'] metatags
Les metatags sont des aides SEO et réseaux sociaux qui peuvent être injectées automatiquement dans le <head>, via le template partial metatags.html.twig.
Exemple :
<html lang="{{ site.language }}">
<head>
<meta charset="utf-8">
{{ include('partials/metatags.html.twig') }}
</head>
<body>
...
</body>
</html> Ce template ajoute les balises meta suivantes :
- Titre de page + titre du site, ou titre du site + baseline du site
- Description de la page/du site
- Mots-clés de la page/du site
- Auteur de la page/du site
- Directives des robots des moteurs de recherche (robots)
- Liens de favicon
- Liens de navigation (premier, précédent, suivant, dernier)
- URL canonique
- Liens alternatifs (ex. : flux RSS, autres langues)
- Liens
rel=me - Open Graph
- Identifiant de profil Facebook
- Twitter/X Card
- Fediverse tag
- Structured data (JSON-LD)
options metatags
Cecil utilise le front matter de la page pour alimenter les meta tags, avec repli sur les options du site si nécessaire.
title: "Page/Site title" # used by title meta
description: "Page/Site description" # used by description meta
tags: [tag1, tag2] # used by keywords meta
keywords: [keyword1, keyword2] # obsolete
author: # used by author meta
name: <name> # author name
url: <url> # author URL
email: <email> # author email
image: image.jpg # used by Open Graph and social networks cards
canonical: # used to override the generated canonical URL
url: <URL> # absolute URL
title: "<URL title>" # optional canonical title
social: # used by social networks meta
twitter: # used by Twitter/X Card
url: <URL> # used for `rel=me` link
site: username # site username
creator: username # page author username
mastodon: # used by Mastodon meta
url: <URL> # used for `rel=me` link
creator: handle # page author account
facebook: # used by Facebook meta
url: <URL> # used for `rel=me` link
id: 123456789 # Facebook profile ID
username: username # page author username configuration metatags
metatags:
title: # title options
divider: " · " # string between page title and site title
only: false # displays page title only (`false` by default)
pagination: # pagination options
shownumber: true # displays page number in title (`true` by default)
label: "Page %s" # how to display page number (`Page %s` by default)
robots: "index,follow" # web crawlers directives (`index,follow` by default)
favicon: # favicon options
enabled: true # includes favicon (`true` by default)
image: favicon.png # path to favicon image
sizes: # sizes by device
- "icon": [32, 57, 76, 96, 128, 192, 228] # web browsers
- "shortcut icon": [196] # Android
- "apple-touch-icon": [120, 152, 180] # iOS
navigation: true # includes previous and next links (`true` by default)
image: true # includes image (`true` by default)
og: true # includes Open Graph meta tags (`true` by default)
articles: "blog" # articles' section (`blog` by default)
twitter: true # includes Twitter/X Card meta tags (`true` by default)
mastodon: true # includes Mastodon meta tags (`true` by default)
data: false # includes JSON-LD structured data (`false` by default) debug
Active le mode debug, utilisé pour afficher des informations de débogage comme des journaux très verbeux, le dump Twig, le profileur Twig, le sourcemap SCSS, etc.
debug: true Il existe deux autres façons d’activer le mode debug :
- Exécuter une commande avec l’option
-vvv - Définir la variable d’environnement
CECIL_DEBUGàtrue
Pages
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 glob, 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 pages.paths
Applique un path personnalisé à toutes les pages d’une section.
pages:
paths:
- section: <section’s ID>
path: <path of pages> Emplacements des 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.highlight
Active la coloration syntaxique du code (false par défaut).
pages:
body:
highlight: false 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
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) pages.body.links
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] # 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.virtual
Les pages virtuelles sont la meilleure façon de créer des pages sans contenu (front matter uniquement).
Elles consistent en une liste de pages avec un path et quelques variables de front matter.
Exemple :
pages:
virtual:
- path: code
redirect: https://github.com/ArnaudLigny pages.default
Les pages par défaut sont des pages créées automatiquement par Cecil (à partir de modèles intégrés) :
pages:
default:
index:
path: ''
title: Accueil
published: true
404:
path: 404
title: Page introuvable
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: Plan de site XML
layout: sitemap
output: xml
changefreq: monthly
priority: 0.5
published: true
excluded: true
multilingual: false
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 :
- désactivée :
published: false - exclue des pages de liste :
excluded: true - exclue de la localisation :
multilingual: false
pages.generators
Les générateurs servent à Cecil 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'
20: 'Cecil\Generator\VirtualPages'
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 à rendre 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 Données
Emplacement des fichiers de données et types d’extensions pris en charge.
Formats pris en charge : YAML, JSON, XML et CSV.
data.dir
Répertoire source des données (data par défaut).
data:
dir: data data.ext
Tableau des extensions de fichiers.
data:
ext: [yaml, yml, json, xml, csv] data.load
Active la collection site.data (true par défaut).
data:
load: true Fichiers statiques
Gestion des fichiers statiques copiés (PDF, polices, etc.).
static.dir
Répertoire source des fichiers statiques (static par défaut).
static:
dir: static static.target
Répertoire vers lequel les fichiers statiques sont copiés (root par défaut).
static:
target: '' static.exclude
Liste des fichiers exclus. Accepte les glob, les chaînes et les expressions régulières.
static:
exclude: ['sass', 'scss', '*.scss', 'package*.json', 'node_modules'] static.load
Active la collection site.static (false par défaut).
static:
load: false static.mounts
Permet de copier des fichiers ou répertoires spécifiques vers une destination spécifique.
static:
mounts: [] exemple de static
static:
dir: docs
target: docs
exclude: ['sass', '*.scss', '/\.bck$/']
load: true
mounts:
- source/path/file.ext: dest/path/file.ext
- node_modules/bootstrap-icons/font/fonts: fonts Ressources
Gestion des ressources (images, fichiers CSS et JS).
assets.dir
Répertoire source des ressources (assets par défaut).
assets:
dir: assets assets.target
Répertoire où les fichiers de ressources distants et redimensionnés sont enregistrés (root par défaut).
assets:
target: '' assets.fingerprint
Active le fingerprinting (cache busting) pour les fichiers de ressources (true par défaut).
assets:
fingerprint: true assets.compile
Active la compilation des fichiers Sass (true par défaut). Voir la documentation de scssphp pour les détails des options.
assets:
compile:
style: expanded # style de compilation (`expanded` ou `compressed`, `expanded` par défaut)
import: [sass, scss] # liste des chemins importés (`[sass, scss, node_modules]` par défaut)
sourcemap: false # active les sourcemaps en mode debug (`false` par défaut)
variables: [] # liste de variables préconfigurées (vide par défaut) assets.minify
Active la minification CSS et JS (true par défaut).
assets:
minify: true assets.images
Gestion des images.
assets:
images:
optimize: false # active l’optimisation d’images avec JpegOptim, Optipng, Pngquant 2, SVGO 1, Gifsicle, cwebp, avifenc (`false` par défaut)
quality: 75 # qualité d’image pour `optimize` et `resize` (`75` par défaut)
responsive:
widths: [480, 640, 768, 1024, 1366, 1600, 1920] # largeurs d’image pour l’attribut `srcset`
sizes:
default: '100vw' # attribut `sizes` par défaut (`100vw` par défaut) assets.images.cdn
L’URL des ressources image peut être facilement remplacée par une url de CDN fournie.
assets:
images:
cdn:
enabled: false # active Image CDN (`false` par défaut)
canonical: true # `image_url` est canonique (au lieu d’un chemin relatif) (`true` par défaut)
remote: true # prend aussi en charge les images non locales (`true` par défaut)
account: 'xxxx' # compte du fournisseur
url: 'https://provider.tld/%account%/%image_url%?w=%width%&q=%quality%&format=%format%' url est un modèle qui contient des variables :
%account%remplacé par l’optionassets.images.cdn.account%image_url%remplacé par l’URL canonique de l’image ou parpath%width%remplacé par la largeur de l’image%quality%remplacé par l’optionassets.images.quality%format%remplacé par le format de l’image
Voir les fournisseurs CDN.
assets.remote.useragent
User agent utilisé pour télécharger les ressources distantes.
assets:
remote:
useragent:
default: <string> # user agent par défaut
useragent1: <string>
useragent2: <string> Disposition
Options des templates.
layouts.dir
Répertoire source des templates (layouts par défaut).
layouts:
dir: layouts layouts.autoescape
Surcharge l’option Twig autoescape (false par défaut).
Si la valeur est null, Cecil applique une stratégie basée sur l’extension du nom de template :
*.js.twig->js*.css.twig->css*.html.twiget*.twig->html- toute autre extension ->
false
layouts:
autoescape: false # désactive l’échappement automatique (par défaut)
#autoescape: null # utilise la stratégie automatique Cecil selon l’extension du template
#autoescape: html
#autoescape: js layouts.images
Options de gestion des images.
layouts:
images:
formats: [] # utilisé par la fonction `html` : ajoute des formats d’image alternatifs comme `source` (ex. `[avif, webp]`, tableau vide par défaut)
responsive: false # utilisé par la fonction `html` : ajoute des images responsives ('width' ou 'density', `false` par défaut)
dark_suffix: '' # suffixe de l’image variante sombre (ex. `.dark`), désactivé par défaut layouts.translations
Options de gestion des traductions.
layouts:
translations:
dir: translations # répertoire source des traductions (`translations` par défaut)
formats: ['yaml', 'mo'] # format des fichiers de traduction (`yaml` et `mo` par défaut) layouts.components
Options des composants de template.
layouts:
components:
dir: components # répertoire source des composants (`components` par défaut)
ext: twig # extension des fichiers de composants (`twig` par défaut) Sortie
Définit où et dans quel format les pages sont rendues.
output.dir
Répertoire où les fichiers de pages rendues sont enregistrés (_site par défaut).
output:
dir: _site output.formats
Liste de définition des formats de sortie, utilisés pour rendre les pages (par ex. HTML, Atom, RSS, JSON, XML, etc.).
output:
formats:
- name: <name> # nom du format, par ex. `html` (requis)
mediatype: <media type> # type MIME, ex. `text/html` (facultatif)
subpath: <sub path> # sous-chemin, ex. `amp` dans `path/amp/index.html` (facultatif)
filename: <file name> # nom du fichier, ex. `index` dans `path/index.html` (facultatif)
extension: <extension> # extension du fichier, ex. `html` dans `path/index.html` (requis)
exclude: [<variable>] # n’applique pas ce format aux pages identifiées par les variables listées, ex. `[redirect, paginated]` (facultatif) Ces formats sont utilisés dans la configuration output.pagetypeformats et dans la variable de page output.
Formats par défaut
Cecil fournit quelques formats par défaut, qui peuvent être surchargés dans le fichier de configuration : html (par défaut), atom, rss, json, xml, txt, amp, js, webmanifest, xsl, jsonfeed, iframe, oembed.
output.pagetypeformats
Il n’est pas nécessaire de définir la variable output pour chaque page, car Cecil applique automatiquement les formats définis pour chaque type de page (homepage, page, section, vocabulary et term).
output:
pagetypeformats:
page: [<format>]
homepage: [<format>]
section: [<format>]
vocabulary: [<format>]
term: [<format>] Plusieurs formats peuvent être définis pour un même type de page. Par exemple, le type de page section peut être rendu automatiquement en HTML et Atom :
output:
pagetypeformats:
section: [html, atom] exemple de output
output:
dir: _site
formats:
- name: html
mediatype: text/html
filename: index
extension: html
- name: atom
mediatype: application/xml
filename: atom
extension: xml
exclude: [redirect, paginated]
pagetypeformats:
page: [html]
homepage: [html, atom]
section: [html, atom]
vocabulary: [html]
term: [html, atom] Post-process
Vous pouvez étendre les capacités de Cecil avec un post-processeur de sortie pour modifier les fichiers de sortie après leur génération.
Cache
Options de cache.
cache.enabled
Le cache est activé par défaut (true), mais vous pouvez le désactiver avec :
cache:
enabled: false cache.dir
Répertoire où les fichiers de cache sont stockés (.cache par défaut).
cache:
dir: '.cache' cache.assets
Options du cache des ressources.
cache.assets.ttl
Temps de vie du cache des ressources en secondes (null par défaut = aucune expiration).
cache:
assets:
ttl: ~ cache.assets.remote.ttl
Temps de vie du cache des ressources distantes en secondes (7 jours par défaut).
cache:
assets:
remotes:
ttl: 604800 # 7 jours cache.templates
Désactive le cache des templates avec false (true par défaut).
cache:
templates: true cache.translations
Désactive le cache des traductions avec false (true par défaut).
cache:
translations: true Serveur
server.headers
Vous pouvez définir des en-têtes HTTP personnalisés, utilisés par le serveur d’aperçu local.
server:
headers:
- path: <path> # chemin relatif, préfixé par un slash. Prend en charge le joker "*".
headers:
- key: <key>
value: "<value>" Exemple :
server:
headers:
- path: /*
headers:
- key: X-Frame-Options
value: "SAMEORIGIN"
- key: X-XSS-Protection
value: "1; mode=block"
- key: X-Content-Type-Options
value: "nosniff"
- key: Content-Security-Policy
value: "default-src 'self'; object-src 'self'; img-src 'self'"
- key: Strict-Transport-Security
value: "max-age=31536000; includeSubDomains; preload"
- path: /assets/*
headers:
- key: Cache-Control
value: "public, max-age=31536000"
- path: /foo.html
headers:
- key: Foo
value: "bar" Optimisation
Les options d’optimisation permettent d’activer la compression des fichiers de sortie : HTML, CSS, JavaScript et images.
optimize:
enabled: false # active l’optimisation des fichiers (`false` par défaut)
html:
enabled: true # active l’optimisation des fichiers HTML
ext: [html, htm] # extensions de fichiers prises en charge
css:
enabled: true # active l’optimisation des fichiers CSS
ext: [css] # extensions de fichiers prises en charge
js:
enabled: true # active l’optimisation des fichiers JavaScript
ext: [js] # extensions de fichiers prises en charge
images:
enabled: true # active l’optimisation des fichiers images
ext: [jpeg, jpg, png, gif, webp, svg, avif] # extensions de fichiers prises en charge Cette option est désactivée par défaut et peut être activée via :
optimize: true Une fois l’option globale activée, les 4 types de fichiers seront traités.
Il est possible de désactiver chacun d’eux via enabled: false et de modifier l’extension des fichiers traités via ext.
Surcharge de configuration
Variables d’environnement
La configuration peut être surchargée via des variables d’environnement.
Chaque nom de variable d’environnement doit être préfixé par CECIL_ et la clé de configuration doit être en majuscules.
Par exemple, la commande suivante définit le baseurl du site :
export CECIL_BASEURL="https://example.com/" Option CLI
Vous pouvez combiner plusieurs fichiers de configuration avec l’option --config (priorité de gauche à droite) :
php cecil.phar --config config-1.yml,config-2.yml