{
  "version": "https://jsonfeed.org/version/1.1",
  "title": "Cecil - Contenu",
  "home_page_url": "https://cecil.app/fr/documentation/contenu/",
  "feed_url": "https://cecil.app/fr/documentation/contenu/feed.json",
  "description": "Créez et organisez votre contenu : pages, front matter, Markdown, contenu multilingue et dynamique.",
  "icon": "https://cecil.app/favicon.7ff4b89eec6dad139a7d2d6561543285.png",
  "favicon": "https://cecil.app/thumbnails/64x/favicon.7ff4b89eec6dad139a7d2d6561543285.png",
  "language": "fr",
  "items": [
    {
      "id": "https://cecil.app/fr/documentation/contenu/pages/",
      "url": "https://cecil.app/fr/documentation/contenu/pages/",
      "title": "Pages et sections",
      "summary": "Anatomie d’une page, préfixe de fichier, sections, sous-sections et page d’accueil.",
      "date_published": "2026-03-27T00:00:00+00:00",
      "date_modified": "2026-10-06T00:00:00+00:00","content_text": "Pages et sections\nUne page est un fichier composé d’un front matter et d’un body.\nFront matter\nLe front matter est une collection de variables (au format clé\/valeur) entourée par ---.\nExemple :\n---\ntitle: \"The title\"\ndate: 2019-02-21\ntags: [tag 1, tag 2]\ncustomvar: \"Value of customvar\"\n---\nVous pouvez aussi utiliser &lt;!-- --&gt; ou +++ comme séparateur.\nCorps (body)\nLe body est le contenu principal d’une page ; il peut être écrit en Markdown ou en texte brut.\nExemple :\n# Header\n\n[toc]\n\n## Sub-Header 1\n\nLorem ipsum dolor [sit amet](https:\/\/example.com), consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n&lt;!-- excerpt --&gt;\nUt enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n\n## Sub-Header 2\n\n![Description](\/image.jpg \"Title\")\n\n## Sub-Header 3\n\n:::tip\nThis is advice.\n:::\nPréfixe de fichier\nLe nom de fichier peut contenir un préfixe pour définir les variables date ou weight de la page (utilisé par sortby).\nSéparateurs de préfixe par défaut : _ et -.\nVous pouvez les personnaliser avec l’option pages.prefix.separator.\ndate\nLe date prefix est utilisé pour définir la date de la page et doit être un format de date valide (c.-à-d. : « YYYY-MM-DD »).\nExemple :\nDans « 2019-04-23_My blog post.md » :\n\nle préfixe est « 2019-04-23 »\nla date de la page est « 2019-04-23 »\nle title de la page est « My blog post »\n\nweight\nLe weight prefix est utilisé pour définir l’ordre de tri de la page et doit être une valeur entière valide.\nExemple :\nDans « 1_The first project.md » :\n\nle préfixe est « 1 »\nle weight de la page est « 1 »\nle title de la page est « The first project »\n\nSection\nCertaines variables dédiées peuvent être utilisées dans une Section personnalisée (c.-à-d. : &lt;section&gt;\/index.md).\nsortby\nL’ordre des pages dans une Section peut être modifié.\nValeurs disponibles :\n\ndate: plus récentes en premier\ntitle: ordre alphabétique\nweight: plus léger en premier\n\nExemple :\n---\nsortby: title\n---\nMore options:\n---\nsortby:\n  variable: date    # \"date\", \"updated\", \"title\" or \"weight\"\n  desc_title: false # used with \"date\" or \"updated\" variable value to sort by desc title order if items have the same date\n  reverse: false    # reversed if true\n---\npagination\nLa configuration globale de pagination est utilisée par défaut, mais vous pouvez la modifier pour une Section donnée.\nExemple :\n---\npagination:\n  max: 5\n  path: \"page\"\n---\nLa pagination peut être désactivée pour une Section :\n---\npagination: false\n---\ncascade\nToutes les variables de cascade sont ajoutées au front matter de toutes les sous-pages.\nExemple :\n---\ncascade:\n  banner: image.jpg\n---\nLes variables existantes ne sont pas écrasées.\ncircular\nDéfinissez circular à true pour activer la navigation circulaire avec page.&lt;prev\/next&gt;.\nAvec des sous-sections, seule la valeur circular de la Section de premier niveau est utilisée.\nExemple :\n---\ncircular: true\n---\nSous-section\nUn dossier imbriqué qui contient explicitement un fichier index.md devient une sous-section de sa Section parente.\n&lt;monsiteweb&gt;\n└─ pages\n   └─ blog                 &lt;- Section\n      ├─ index.md\n      ├─ post-1.md         &lt;- Page de la Section « blog »\n      └─ 2024              &lt;- Sous-section (contient un « index.md »)\n         ├─ index.md\n         └─ post-2.md      &lt;- Page de la Section « blog » *et* de la sous-section « blog\/2024 »\nUne sous-section :\n\nest une Section (même type, mêmes variables et même résolution de gabarit) accessible à sa propre URL (ex. : \/blog\/2024\/)\nest rendue avec les gabarits de ses Sections parentes si elle n'a pas les siens (ex. : blog\/list.html.twig)\npeut être imbriquée à n'importe quelle profondeur (ex. : blog\/2024\/06\/)\nliste ses propres pages, et ses pages appartiennent aussi à chacune de leurs Sections parentes\nn'est pas listée dans sa Section parente\nest placée dans la navigation page.&lt;prev\/next&gt; de sa Section parente (selon son sortby), suivie de ses propres pages\n\nUn dossier imbriqué sans fichier index.md n'est pas une sous-section : ses pages appartiennent simplement à la Section parente.\nPage d'accueil\nComme une autre section, la Page d'accueil prend en charge la configuration sortby et pagination.\npagesfrom\nDéfinissez un nom de Section valide dans pagesfrom pour utiliser la collection de pages de cette Section dans la Page d'accueil.\nExemple :\n---\npagesfrom: blog\n---",
      "content_html": "<h1>Pages et sections</h1>\n<p>Une page est un fichier composé d’un <a href=\"#front-matter\"><strong>front matter</strong></a> et d’un <a href=\"#corps-body\"><strong>body</strong></a>.</p>\n<h2 id=\"front-matter\">Front matter</h2>\n<p>Le <em>front matter</em> est une collection de <a href=\"2-front-matter.fr.md\">variables</a> (au format <em>clé/valeur</em>) entourée par <code translate=\"no\">---</code>.</p>\n<p><em>Exemple :</em></p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-meta\">---</span>\n<span class=\"hljs-attr\">title:</span> <span class=\"hljs-string\">\"The title\"</span>\n<span class=\"hljs-attr\">date:</span> <span class=\"hljs-number\">2019</span><span class=\"hljs-number\">-02</span><span class=\"hljs-number\">-21</span>\n<span class=\"hljs-attr\">tags:</span> <span class=\"hljs-string\">[tag</span> <span class=\"hljs-number\">1</span><span class=\"hljs-string\">,</span> <span class=\"hljs-string\">tag</span> <span class=\"hljs-number\">2</span><span class=\"hljs-string\">]</span>\n<span class=\"hljs-attr\">customvar:</span> <span class=\"hljs-string\">\"Value of customvar\"</span>\n<span class=\"hljs-meta\">---</span></code></pre>\n<aside class=\"note note-info\"><p>Vous pouvez aussi utiliser <code translate=\"no\">&lt;!-- --&gt;</code> ou <code translate=\"no\">+++</code> comme séparateur.</p></aside>\n<h2 id=\"corps-body\">Corps (body)</h2>\n<p>Le <em>body</em> est le contenu principal d’une page ; il peut être écrit en <a href=\"3-markdown.fr.md\">Markdown</a> ou en texte brut.</p>\n<p><em>Exemple :</em></p>\n<pre><code class=\"language-markdown hljs markdown\" translate=\"no\"><span class=\"hljs-section\"># Header</span>\n\n[toc]\n\n<span class=\"hljs-section\">## Sub-Header 1</span>\n\nLorem ipsum dolor [<span class=\"hljs-string\">sit amet</span>](<span class=\"hljs-link\">https://example.com</span>), consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n<span class=\"xml\"><span class=\"hljs-comment\">&lt;!-- excerpt --&gt;</span></span>\nUt enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n\n<span class=\"hljs-section\">## Sub-Header 2</span>\n\n![<span class=\"hljs-string\">Description</span>](<span class=\"hljs-link\">/image.jpg \"Title\"</span>)\n\n<span class=\"hljs-section\">## Sub-Header 3</span>\n\n:::tip\nThis is advice.\n:::</code></pre>\n<h2 id=\"prefixe-de-fichier\">Préfixe de fichier</h2>\n<p>Le nom de fichier peut contenir un préfixe pour définir les variables <code translate=\"no\">date</code> ou <code translate=\"no\">weight</code> de la page (utilisé par <a href=\"../templates/reference/2-sorts.fr.md#sort-by-date\"><code translate=\"no\">sortby</code></a>).</p>\n<aside class=\"note note-info\"><p>Séparateurs de préfixe par défaut : <code translate=\"no\">_</code> et <code translate=\"no\">-</code>.</p>\n<p>Vous pouvez les personnaliser avec l’option <a href=\"../configuration/4-pages.fr.md#pages-prefix-separator\"><code translate=\"no\">pages.prefix.separator</code></a>.</p></aside>\n<h3 id=\"date\">date</h3>\n<p>Le <em>date prefix</em> est utilisé pour définir la <code translate=\"no\">date</code> de la page et doit être un format de date valide (c.-à-d. : « YYYY-MM-DD »).</p>\n<p><em>Exemple :</em></p>\n<p>Dans « 2019-04-23_My blog post.md » :</p>\n<ul>\n<li>le préfixe est « 2019-04-23 »</li>\n<li>la <code translate=\"no\">date</code> de la page est « 2019-04-23 »</li>\n<li>le <code translate=\"no\">title</code> de la page est « My blog post »</li>\n</ul>\n<h3 id=\"weight\">weight</h3>\n<p>Le <em>weight prefix</em> est utilisé pour définir l’ordre de tri de la page et doit être une valeur entière valide.</p>\n<p><em>Exemple :</em></p>\n<p>Dans « 1_The first project.md » :</p>\n<ul>\n<li>le préfixe est « 1 »</li>\n<li>le <code translate=\"no\">weight</code> de la page est « 1 »</li>\n<li>le <code translate=\"no\">title</code> de la page est « The first project »</li>\n</ul>\n<h2 id=\"section\">Section</h2>\n<p>Certaines variables dédiées peuvent être utilisées dans une <em>Section</em> personnalisée (c.-à-d. : <code translate=\"no\">&lt;section&gt;/index.md</code>).</p>\n<h3 id=\"sortby\">sortby</h3>\n<p>L’ordre des pages dans une <em>Section</em> peut être modifié.</p>\n<p>Valeurs disponibles :</p>\n<ul>\n<li><code translate=\"no\">date</code>: plus récentes en premier</li>\n<li><code translate=\"no\">title</code>: ordre alphabétique</li>\n<li><code translate=\"no\">weight</code>: plus léger en premier</li>\n</ul>\n<p><em>Exemple :</em></p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-meta\">---</span>\n<span class=\"hljs-attr\">sortby:</span> <span class=\"hljs-string\">title</span>\n<span class=\"hljs-meta\">---</span></code></pre>\n<p><strong>More options:</strong></p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-meta\">---</span>\n<span class=\"hljs-attr\">sortby:</span>\n  <span class=\"hljs-attr\">variable:</span> <span class=\"hljs-string\">date</span>    <span class=\"hljs-comment\"># \"date\", \"updated\", \"title\" or \"weight\"</span>\n  <span class=\"hljs-attr\">desc_title:</span> <span class=\"hljs-literal\">false</span> <span class=\"hljs-comment\"># used with \"date\" or \"updated\" variable value to sort by desc title order if items have the same date</span>\n  <span class=\"hljs-attr\">reverse:</span> <span class=\"hljs-literal\">false</span>    <span class=\"hljs-comment\"># reversed if true</span>\n<span class=\"hljs-meta\">---</span></code></pre>\n<h3 id=\"pagination\">pagination</h3>\n<p>La <a href=\"../configuration/4-pages.fr.md#pages-pagination\">configuration globale de pagination</a> est utilisée par défaut, mais vous pouvez la modifier pour une <em>Section</em> donnée.</p>\n<p><em>Exemple :</em></p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-meta\">---</span>\n<span class=\"hljs-attr\">pagination:</span>\n  <span class=\"hljs-attr\">max:</span> <span class=\"hljs-number\">5</span>\n  <span class=\"hljs-attr\">path:</span> <span class=\"hljs-string\">\"page\"</span>\n<span class=\"hljs-meta\">---</span></code></pre>\n<p>La pagination peut être désactivée pour une <em>Section</em> :</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-meta\">---</span>\n<span class=\"hljs-attr\">pagination:</span> <span class=\"hljs-literal\">false</span>\n<span class=\"hljs-meta\">---</span></code></pre>\n<h3 id=\"cascade\">cascade</h3>\n<p>Toutes les variables de <code translate=\"no\">cascade</code> sont ajoutées au front matter de toutes les <em>sous-pages</em>.</p>\n<p><em>Exemple :</em></p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-meta\">---</span>\n<span class=\"hljs-attr\">cascade:</span>\n  <span class=\"hljs-attr\">banner:</span> <span class=\"hljs-string\">image.jpg</span>\n<span class=\"hljs-meta\">---</span></code></pre>\n<aside class=\"note note-info\"><p>Les variables existantes ne sont pas écrasées.</p></aside>\n<h3 id=\"circular\">circular</h3>\n<p>Définissez <code translate=\"no\">circular</code> à <code translate=\"no\">true</code> pour activer la navigation circulaire avec <a href=\"../templates/2-variables.fr.md#page-prev-next\"><em>page.&lt;prev/next&gt;</em></a>.</p>\n<aside class=\"note note-info\"><p>Avec des <a href=\"#sous-section\">sous-sections</a>, seule la valeur <code translate=\"no\">circular</code> de la <em>Section</em> de premier niveau est utilisée.</p></aside>\n<p><em>Exemple :</em></p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-meta\">---</span>\n<span class=\"hljs-attr\">circular:</span> <span class=\"hljs-literal\">true</span>\n<span class=\"hljs-meta\">---</span></code></pre>\n<h3 id=\"sous-section\">Sous-section</h3>\n<p>Un dossier imbriqué qui contient explicitement un fichier <code translate=\"no\">index.md</code> devient une <em>sous-section</em> de sa <em>Section</em> parente.</p>\n<pre><code class=\"language-plaintext hljs plaintext\" translate=\"no\">&lt;monsiteweb&gt;\n└─ pages\n   └─ blog                 &lt;- Section\n      ├─ index.md\n      ├─ post-1.md         &lt;- Page de la Section « blog »\n      └─ 2024              &lt;- Sous-section (contient un « index.md »)\n         ├─ index.md\n         └─ post-2.md      &lt;- Page de la Section « blog » *et* de la sous-section « blog/2024 »</code></pre>\n<p>Une <em>sous-section</em> :</p>\n<ul>\n<li>est une <em>Section</em> (même type, mêmes variables et même résolution de <a href=\"../templates/1-lookup-rules.fr.md#type-section\">gabarit</a>) accessible à sa propre URL (ex. : <code translate=\"no\">/blog/2024/</code>)</li>\n<li>est rendue avec les gabarits de ses <em>Sections</em> parentes si elle n'a pas les siens (ex. : <code translate=\"no\">blog/list.html.twig</code>)</li>\n<li>peut être imbriquée à n'importe quelle profondeur (ex. : <code translate=\"no\">blog/2024/06/</code>)</li>\n<li>liste ses propres pages, et ses pages appartiennent aussi à chacune de leurs <em>Sections</em> parentes</li>\n<li>n'est <strong>pas</strong> listée dans sa <em>Section</em> parente</li>\n<li>est placée dans la navigation <a href=\"../templates/2-variables.fr.md#page-prev-next\"><em>page.&lt;prev/next&gt;</em></a> de sa <em>Section</em> parente (selon son <code translate=\"no\">sortby</code>), suivie de ses propres pages</li>\n</ul>\n<aside class=\"note note-info\"><p>Un dossier imbriqué <strong>sans</strong> fichier <code translate=\"no\">index.md</code> n'est pas une <em>sous-section</em> : ses pages appartiennent simplement à la <em>Section</em> parente.</p></aside>\n<h2 id=\"page-d-accueil\">Page d'accueil</h2>\n<p>Comme une autre section, la <em>Page d'accueil</em> prend en charge la configuration <code translate=\"no\">sortby</code> et <code translate=\"no\">pagination</code>.</p>\n<h3 id=\"pagesfrom\">pagesfrom</h3>\n<p>Définissez un nom de <em>Section</em> valide dans <code translate=\"no\">pagesfrom</code> pour utiliser la collection de pages de cette <em>Section</em> dans la <em>Page d'accueil</em>.</p>\n<p><em>Exemple :</em></p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-meta\">---</span>\n<span class=\"hljs-attr\">pagesfrom:</span> <span class=\"hljs-string\">blog</span>\n<span class=\"hljs-meta\">---</span></code></pre>",
      "language": "fr"
    },
    {
      "id": "https://cecil.app/fr/documentation/contenu/front-matter/",
      "url": "https://cecil.app/fr/documentation/contenu/front-matter/",
      "title": "Front matter",
      "summary": "Variables de page personnalisées et prédéfinies : menu, taxonomie, planification, redirection, alias, sortie, etc.",
      "date_published": "2026-03-27T00:00:00+00:00",
      "date_modified": "2026-10-03T00:00:00+00:00","content_text": "Front matter\nLe front matter peut contenir des variables personnalisées appliquées à la page courante.\nIl doit se trouver au tout début du fichier et être un YAML valide.\nVariables prédéfinies\n\n\n\nVariable\nDescription\nValeur par défaut\nExemple\n\n\n\n\ntitle\nTitre\nNom de fichier sans extension.\nPost 1\n\n\nlayout\nTemplate\nVoir Lookup rules.\n404\n\n\ndate\nDate de création\nDate de création du fichier (objet PHP DateTime).\n2019\/04\/15\n\n\nsection\nSection\nSection de la page.\nblog\n\n\npath\nChemin\nPath de la page.\nblog\/post-1\n\n\nslug\nSlug\nSlug de la page.\npost-1\n\n\npublished\nPublié ou non\ntrue.\nfalse\n\n\ndraft\nBrouillon ou non\nfalse.\ntrue\n\n\n\nToutes les variables prédéfinies peuvent être surchargées, sauf section.\nupdated\nLa variable updated sert à définir la date de dernière modification d’une page.\nExemple :\n---\nupdated: 2026-02-02\n---\nAvant la version 8.80.1, la variable updated était une variable prédéfinie. Elle est désormais optionnelle (et doit être définie dans le front matter pour être utilisée).\nmenu\nUne page peut être ajoutée à un menu.\nLe nom de l’entrée est le title de la page et l’URL est le path de la page.\nLa même page peut être ajoutée à plusieurs menus, et la position de chaque entrée peut être définie avec la clé weight (la plus faible en premier). La clé name peut être utilisée pour personnaliser le nom de l’entrée par menu.\nExemples :\n---\nmenu: main\n---\n---\nmenu: [main, navigation] # same page in multiple menus\n---\n---\nmenu:\n  main:\n    weight: 10\n  navigation:\n    weight: 20\n---\n---\ntitle: 'Notre expertise'\nmenu:\n  main:\n    weight: 15\n  footer:\n    weight: 15\n    name: \"Expertise\" # personnalise le nom de l'entrée dans ce menu\n---\nTaxonomie\nLa taxonomie permet de connecter, relier et classer le contenu de votre site Web.\nDans Cecil, ces termes sont regroupés dans des vocabulaires.\nLes vocabulaires sont déclarés dans la Configuration.\n\nVocabulaire\nUne catégorisation du contenu (ex. : tags, categories, etc.).\nTerme\nUn terme est un élément d’un vocabulaire (ex. : Développement, PHP, etc.).\n\nExemple :\n---\ntags: [\"Développement\", \"PHP\"]\n---\nCecil génère ensuite, pour chaque vocabulaire :\n\nune page listant ses termes, ex. : \/tags\/\nune page par terme listant ses pages, ex. : \/tags\/developpement\/ et \/tags\/php\/\n\nVoir les règles de recherche des templates et les variables de taxonomie pour personnaliser ces pages.\nPlanification\nPlanifie la publication des pages.\nExemple :\nLa page sera publiée si la date courante est &gt;= 2023-02-07 :\nschedule:\n  publish: 2023-02-07\nCette page est publiée si la date courante est &lt;= 2022-04-28 :\nschedule:\n  expiry: 2022-04-28\nredirect\nComme son nom l’indique, la variable redirect sert à rediriger une page vers une URL dédiée.\nExemple :\n---\nredirect: \"https:\/\/arnaudligny.fr\"\n---\nLa redirection fonctionne avec le template redirect.html.twig.\nalias\nUn alias est une redirection vers la page courante.\nExemple :\n---\ntitle: \"About\"\nalias:\n  - contact\n---\nDans l’exemple précédent, contact\/ redirige vers about\/.\noutput\nDéfinit le format de sortie de la page.\nLes formats disponibles sont : html, atom, rss, json, xml, etc.\nVous pouvez définir un ou plusieurs formats dans un tableau.\nIl n’est pas obligatoire de définir un format de sortie, mais si vous le faites, il doit correspondre à l’un des formats disponibles définis dans la Configuration.\nExemple :\n---\noutput: [html, atom]\n---\nexternal\nUne page avec une variable external tente de récupérer le contenu de la ressource ciblée.\nExemple :\n---\nexternal: \"https:\/\/raw.githubusercontent.com\/Cecilapp\/Cecil\/main\/README.md\"\n---\nexcluded\nDéfinissez excluded à true pour masquer une page des pages de liste (c.-à-d. : Home page, Section, Sitemap, etc.).\nExemple :\n---\nexcluded: true\n---\nexcluded est différent de published : une page exclue est publiée, mais masquée des pages de liste.\nDepuis la version 8.49.0, l’ancienne variable exclude a été remplacée par excluded.",
      "content_html": "<h1>Front matter</h1>\n<p>Le <em>front matter</em> peut contenir des variables personnalisées appliquées à la page courante.</p>\n<p>Il doit se trouver au tout début du fichier et être un <a href=\"https://en.wikipedia.org/wiki/YAML\" target=\"_blank\" rel=\"noopener noreferrer\">YAML</a> valide.</p>\n<h2 id=\"variables-predefinies\">Variables prédéfinies</h2>\n<table>\n<thead>\n<tr>\n<th>Variable</th>\n<th>Description</th>\n<th>Valeur par défaut</th>\n<th>Exemple</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code translate=\"no\">title</code></td>\n<td>Titre</td>\n<td>Nom de fichier sans extension.</td>\n<td><code translate=\"no\">Post 1</code></td>\n</tr>\n<tr>\n<td><code translate=\"no\">layout</code></td>\n<td>Template</td>\n<td>Voir <a href=\"../templates/1-lookup-rules.fr.md#regles-de-recherche\"><em>Lookup rules</em></a>.</td>\n<td><code translate=\"no\">404</code></td>\n</tr>\n<tr>\n<td><code translate=\"no\">date</code></td>\n<td>Date de création</td>\n<td>Date de création du fichier (objet PHP <em>DateTime</em>).</td>\n<td><code translate=\"no\">2019/04/15</code></td>\n</tr>\n<tr>\n<td><code translate=\"no\">section</code></td>\n<td>Section</td>\n<td><em>Section</em> de la page.</td>\n<td><code translate=\"no\">blog</code></td>\n</tr>\n<tr>\n<td><code translate=\"no\">path</code></td>\n<td>Chemin</td>\n<td><em>Path</em> de la page.</td>\n<td><code translate=\"no\">blog/post-1</code></td>\n</tr>\n<tr>\n<td><code translate=\"no\">slug</code></td>\n<td>Slug</td>\n<td><em>Slug</em> de la page.</td>\n<td><code translate=\"no\">post-1</code></td>\n</tr>\n<tr>\n<td><code translate=\"no\">published</code></td>\n<td>Publié ou non</td>\n<td><code translate=\"no\">true</code>.</td>\n<td><code translate=\"no\">false</code></td>\n</tr>\n<tr>\n<td><code translate=\"no\">draft</code></td>\n<td>Brouillon ou non</td>\n<td><code translate=\"no\">false</code>.</td>\n<td><code translate=\"no\">true</code></td>\n</tr>\n</tbody>\n</table>\n<aside class=\"note note-info\"><p>Toutes les variables prédéfinies peuvent être surchargées, sauf <code translate=\"no\">section</code>.</p></aside>\n<h2 id=\"updated\">updated</h2>\n<p>La variable <code translate=\"no\">updated</code> sert à définir la date de dernière modification d’une page.</p>\n<p><em>Exemple :</em></p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-meta\">---</span>\n<span class=\"hljs-attr\">updated:</span> <span class=\"hljs-number\">2026</span><span class=\"hljs-number\">-02</span><span class=\"hljs-number\">-02</span>\n<span class=\"hljs-meta\">---</span></code></pre>\n<aside class=\"note note-warning\"><p>Avant la version 8.80.1, la variable <code translate=\"no\">updated</code> était une variable prédéfinie. Elle est désormais optionnelle (et doit être définie dans le front matter pour être utilisée).</p></aside>\n<h2 id=\"menu\">menu</h2>\n<p>Une page peut être ajoutée à un <a href=\"../configuration/1-site.fr.md#menus\">menu</a>.</p>\n<p>Le nom de l’entrée est le <code translate=\"no\">title</code> de la page et l’URL est le <code translate=\"no\">path</code> de la page.</p>\n<p>La même page peut être ajoutée à plusieurs menus, et la position de chaque entrée peut être définie avec la clé <code translate=\"no\">weight</code> (la plus faible en premier). La clé <code translate=\"no\">name</code> peut être utilisée pour personnaliser le nom de l’entrée par menu.</p>\n<p><em>Exemples :</em></p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-meta\">---</span>\n<span class=\"hljs-attr\">menu:</span> <span class=\"hljs-string\">main</span>\n<span class=\"hljs-meta\">---</span></code></pre>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-meta\">---</span>\n<span class=\"hljs-attr\">menu:</span> <span class=\"hljs-string\">[main,</span> <span class=\"hljs-string\">navigation]</span> <span class=\"hljs-comment\"># same page in multiple menus</span>\n<span class=\"hljs-meta\">---</span></code></pre>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-meta\">---</span>\n<span class=\"hljs-attr\">menu:</span>\n  <span class=\"hljs-attr\">main:</span>\n    <span class=\"hljs-attr\">weight:</span> <span class=\"hljs-number\">10</span>\n  <span class=\"hljs-attr\">navigation:</span>\n    <span class=\"hljs-attr\">weight:</span> <span class=\"hljs-number\">20</span>\n<span class=\"hljs-meta\">---</span></code></pre>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-meta\">---</span>\n<span class=\"hljs-attr\">title:</span> <span class=\"hljs-string\">'Notre expertise'</span>\n<span class=\"hljs-attr\">menu:</span>\n  <span class=\"hljs-attr\">main:</span>\n    <span class=\"hljs-attr\">weight:</span> <span class=\"hljs-number\">15</span>\n  <span class=\"hljs-attr\">footer:</span>\n    <span class=\"hljs-attr\">weight:</span> <span class=\"hljs-number\">15</span>\n    <span class=\"hljs-attr\">name:</span> <span class=\"hljs-string\">\"Expertise\"</span> <span class=\"hljs-comment\"># personnalise le nom de l'entrée dans ce menu</span>\n<span class=\"hljs-meta\">---</span></code></pre>\n<h2 id=\"taxonomie\">Taxonomie</h2>\n<p>La taxonomie permet de connecter, relier et classer le contenu de votre site Web.<br>\nDans Cecil, ces termes sont regroupés dans des vocabulaires.</p>\n<p>Les vocabulaires sont déclarés dans la <a href=\"../configuration/1-site.fr.md#taxonomies\"><em>Configuration</em></a>.</p>\n<dl>\n<dt>Vocabulaire</dt>\n<dd>Une catégorisation du contenu (ex. : <code translate=\"no\">tags</code>, <code translate=\"no\">categories</code>, etc.).</dd>\n<dt>Terme</dt>\n<dd>Un terme est un élément d’un vocabulaire (ex. : <code translate=\"no\">Développement</code>, <code translate=\"no\">PHP</code>, etc.).</dd>\n</dl>\n<p><em>Exemple :</em></p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-meta\">---</span>\n<span class=\"hljs-attr\">tags:</span> <span class=\"hljs-string\">[\"Développement\",</span> <span class=\"hljs-string\">\"PHP\"</span><span class=\"hljs-string\">]</span>\n<span class=\"hljs-meta\">---</span></code></pre>\n<p>Cecil génère ensuite, pour chaque vocabulaire :</p>\n<ul>\n<li>une page listant ses termes, ex. : <code translate=\"no\">/tags/</code></li>\n<li>une page par terme listant ses pages, ex. : <code translate=\"no\">/tags/developpement/</code> et <code translate=\"no\">/tags/php/</code></li>\n</ul>\n<p>Voir les <a href=\"../templates/1-lookup-rules.fr.md#type-vocabulary\">règles de recherche des templates</a> et les <a href=\"../templates/2-variables.fr.md#taxonomie\">variables de taxonomie</a> pour personnaliser ces pages.</p>\n<h2 id=\"planification\">Planification</h2>\n<p>Planifie la publication des pages.</p>\n<p><em>Exemple :</em></p>\n<p>La page sera publiée si la date courante est &gt;= 2023-02-07 :</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">schedule:</span>\n  <span class=\"hljs-attr\">publish:</span> <span class=\"hljs-number\">2023</span><span class=\"hljs-number\">-02</span><span class=\"hljs-number\">-07</span></code></pre>\n<p>Cette page est publiée si la date courante est &lt;= 2022-04-28 :</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">schedule:</span>\n  <span class=\"hljs-attr\">expiry:</span> <span class=\"hljs-number\">2022</span><span class=\"hljs-number\">-04</span><span class=\"hljs-number\">-28</span></code></pre>\n<h2 id=\"redirect\">redirect</h2>\n<p>Comme son nom l’indique, la variable <code translate=\"no\">redirect</code> sert à rediriger une page vers une URL dédiée.</p>\n<p><em>Exemple :</em></p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-meta\">---</span>\n<span class=\"hljs-attr\">redirect:</span> <span class=\"hljs-string\">\"https://arnaudligny.fr\"</span>\n<span class=\"hljs-meta\">---</span></code></pre>\n<aside class=\"note note-info\"><p>La redirection fonctionne avec le template <a href=\"https://github.com/Cecilapp/Cecil/blob/main/resources/layouts/_default/redirect.html.twig\" target=\"_blank\" rel=\"noopener noreferrer\"><code translate=\"no\">redirect.html.twig</code></a>.</p></aside>\n<h2 id=\"alias\">alias</h2>\n<p>Un alias est une redirection vers la page courante.</p>\n<p><em>Exemple :</em></p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-meta\">---</span>\n<span class=\"hljs-attr\">title:</span> <span class=\"hljs-string\">\"About\"</span>\n<span class=\"hljs-attr\">alias:</span>\n  <span class=\"hljs-bullet\">-</span> <span class=\"hljs-string\">contact</span>\n<span class=\"hljs-meta\">---</span></code></pre>\n<p>Dans l’exemple précédent, <code translate=\"no\">contact/</code> redirige vers <code translate=\"no\">about/</code>.</p>\n<h2 id=\"output\">output</h2>\n<p>Définit le format de sortie de la page.</p>\n<p>Les formats disponibles sont : <code translate=\"no\">html</code>, <code translate=\"no\">atom</code>, <code translate=\"no\">rss</code>, <code translate=\"no\">json</code>, <code translate=\"no\">xml</code>, etc.<br>\nVous pouvez définir un ou plusieurs formats dans un tableau.</p>\n<p>Il n’est pas obligatoire de définir un format de sortie, mais si vous le faites, il doit correspondre à l’un des formats disponibles définis dans la <a href=\"../configuration/8-output.fr.md#output-formats\"><em>Configuration</em></a>.</p>\n<p><em>Exemple :</em></p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-meta\">---</span>\n<span class=\"hljs-attr\">output:</span> <span class=\"hljs-string\">[html,</span> <span class=\"hljs-string\">atom]</span>\n<span class=\"hljs-meta\">---</span></code></pre>\n<h2 id=\"external\">external</h2>\n<p>Une page avec une variable <code translate=\"no\">external</code> tente de récupérer le contenu de la ressource ciblée.</p>\n<p><em>Exemple :</em></p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-meta\">---</span>\n<span class=\"hljs-attr\">external:</span> <span class=\"hljs-string\">\"https://raw.githubusercontent.com/Cecilapp/Cecil/main/README.md\"</span>\n<span class=\"hljs-meta\">---</span></code></pre>\n<h2 id=\"excluded\">excluded</h2>\n<p>Définissez <code translate=\"no\">excluded</code> à <code translate=\"no\">true</code> pour masquer une page des pages de liste (c.-à-d. : <em>Home page</em>, <em>Section</em>, <em>Sitemap</em>, etc.).</p>\n<p><em>Exemple :</em></p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-meta\">---</span>\n<span class=\"hljs-attr\">excluded:</span> <span class=\"hljs-literal\">true</span>\n<span class=\"hljs-meta\">---</span></code></pre>\n<aside class=\"note note-info\"><p><code translate=\"no\">excluded</code> est différent de <a href=\"#variables-predefinies\"><code translate=\"no\">published</code></a> : une page exclue est publiée, mais masquée des pages de liste.</p></aside>\n<aside class=\"note note-warning\"><p>Depuis la version 8.49.0, l’ancienne variable <code translate=\"no\">exclude</code> a été remplacée par <code translate=\"no\">excluded</code>.</p></aside>",
      "language": "fr"
    },
    {
      "id": "https://cecil.app/fr/documentation/contenu/markdown/",
      "url": "https://cecil.app/fr/documentation/contenu/markdown/",
      "title": "Markdown",
      "summary": "Syntaxe et extensions Markdown : attributs, liens, images, table des matières, notes, coloration syntaxique, etc.",
      "date_published": "2026-03-27T00:00:00+00:00",
      "date_modified": "2026-10-03T00:00:00+00:00","content_text": "Markdown\nCecil prend en charge le format Markdown, ainsi que Markdown Extra.\nCecil fournit aussi des fonctionnalités supplémentaires pour enrichir votre contenu, voir ci-dessous.\nAttributs\nAvec Markdown Extra, vous pouvez définir un id, une classe et des attributs personnalisés sur certains éléments à l’aide d’un bloc d’attributs.\nPar exemple, placez le(s) attribut(s) souhaité(s) après un en-tête, un bloc de code délimité, un lien ou une image en fin de ligne, entre accolades, comme ceci :\n## En-tête {#id .class attribute=value}\nPour un élément en ligne, comme un lien, vous devez utiliser un retour à la ligne après l’accolade fermante :\nLorem ipsum [dolor](url){attribute=value} \nsit amet.\nLiens\nVous pouvez créer un lien avec la syntaxe [Texte](url) ; url peut être un chemin, un chemin relatif vers un fichier Markdown, une URL externe, etc.\nExemple :\n[Link to a path](\/about\/)\n[Link to a Markdown file](\/fr\/a-propos\/)\n[Link to Cecil website](https:\/\/cecil.app)\nUn lien relatif vers un fichier Markdown est résolu depuis le dossier du fichier courant (comme sur GitHub), puis remplacé par l’URL de la page ciblée.\nLien vers une page\nVous pouvez facilement créer un lien vers une page avec la syntaxe [Titre de page](page:page-id).\nExemple :\n[Link to a blog post](page:blog\/post-1)\nExterne\nPar défaut, les liens externes ont la valeur suivante pour l’attribut rel : noopener noreferrer.\nExemple :\n&lt;a href=\"&lt;url&gt;\" rel=\"noopener noreferrer\"&gt;Link to another website&lt;\/a&gt;\nVous pouvez modifier ce comportement avec les options pages.body.links.external.\nLiens intégrés\nVous pouvez laisser Cecil essayer de transformer un lien en contenu embarqué en utilisant l’attribut {embed} ou en activant l’option de configuration globale pages.body.links.embed.enabled à true.\nSeuls les liens YouTube, Vimeo, Dailymotion et GitHub Gists sont pris en charge.\nExemple :\n[CECIL : LE générateur de SITES STATIQUES en PHP](https:\/\/www.youtube.com\/watch?v=ur8koU0iYvc){embed}\n\n\n\nLocal video\/audio files\nCecil peut aussi créer des éléments HTML vidéo et audio, selon l’extension du fichier.\nExemple :\n[Video file](video.mp4){embed controls poster=\/images\/video-test.png}\n[Audio file](song.mp3){embed controls}\nEst converti en :\n&lt;video src=\"\/video.mp4\" controls poster=\"\/images\/video-test.png\" style=\"max-width:100%;height:auto;\"&gt;&lt;\/video&gt;\n&lt;audio src=\"\/song.mp3\" controls&gt;&lt;\/audio&gt;\nImages\nPour ajouter une image, utilisez un point d’exclamation (!) suivi d’une description alternative entre crochets ([]), puis du chemin ou de l’URL de l’image entre parenthèses (()).\nVous pouvez facultativement ajouter un titre entre guillemets.\n![Alternative description](\/image.jpg \"Image title\")\nLe chemin doit être relatif à la racine de votre site Web (ex. : \/image.jpg), mais Cecil est capable de normaliser un chemin relatif aux répertoires assets et static (ex. : ..\/..\/assets\/image.jpg).\nLazy loading\nCecil ajoute l’attribut loading=\"lazy\" à chaque image.\nExemple :\n![](\/image.jpg)\nEst converti en :\n&lt;img src=\"\/image.jpg\" loading=\"lazy\"&gt;\nVous pouvez désactiver ce comportement avec l’attribut {loading=eager} ou avec l’option lazy.\nDecoding\nCecil ajoute l’attribut decoding=\"async\" à chaque image.\nExemple :\n![](\/image.jpg)\nEst converti en :\n&lt;img src=\"\/image.jpg\" decoding=\"async\"&gt;\nVous pouvez désactiver ce comportement avec l’attribut {decoding=auto} ou avec l’option decoding.\nRedimensionnement\nChaque image du body peut être redimensionnée automatiquement en définissant une largeur inférieure à celle d’origine, avec l’attribut additionnel {width=X}.\nExemple :\n![](\/image.jpg){width=800}\nEst converti en :\n&lt;img src=\"\/thumbnails\/800\/image.jpg\" width=\"800\" height=\"600\"&gt;\nLe ratio est conservé (l’attribut height est calculé automatiquement), le fichier original n’est pas modifié et la version redimensionnée est stockée dans \/thumbnails\/&lt;width&gt;\/.\nCette fonctionnalité nécessite une bibliothèque de traitement d’images : Imagick est utilisé en priorité s’il est disponible (et capable de lire le JPEG et le PNG), puis libvips (via l’extension PHP FFI), et enfin GD en dernier recours ; sinon, elle ajoute seulement un attribut HTML width à la balise img.\nLe support de libvips est optionnel et n’est pas inclus dans cecil.phar. Pour l’utiliser, Cecil doit être installé avec Composer et il faut :\n\nlibvips installé sur le système\nl’extension PHP FFI activée\nle paquet intervention\/image-driver-vips installé avec Cecil\n\nSi Cecil est une dépendance de votre projet (voir Bibliothèque) :\ncomposer require intervention\/image-driver-vips\nSi Cecil est installé globalement :\ncomposer global require cecil\/cecil intervention\/image-driver-vips\nFormats\nSi l’option formats est définie, des images alternatives sont créées et ajoutées.\nExemple :\n![](\/image.jpg)\nPeut être converti en :\n&lt;picture&gt;\n  &lt;source srcset=\"\/image.avif\" type=\"image\/avif\"&gt;\n  &lt;source srcset=\"\/image.webp\" type=\"image\/webp\"&gt;\n  &lt;img src=\"\/image.jpg\"&gt;\n&lt;\/picture&gt;\nVeuillez noter que tous les formats d’image ne sont pas toujours inclus dans les extensions d’image PHP.\nResponsive\nSi l’option responsive est activée, alors toutes les images du body seront automatiquement rendues « responsive ».\nExemple :\n![](\/image.jpg){width=800}\nsera converti en :\n&lt;img src=\"\/thumbnails\/800\/image.jpg\" width=\"800\" height=\"600\"\n  srcset=\"\/thumbnails\/320\/image.jpg 320w,\n          \/thumbnails\/640\/image.jpg 640w,\n          \/thumbnails\/800\/image.jpg 800w\"\n  sizes=\"100vw\"\n&gt;\nComme une image du body est convertie en Asset, les différentes largeurs doivent être définies dans la configuration des assets.\nL’attribut sizes prend la valeur de l’option de configuration assets.images.responsive.sizes.default, mais peut être modifié en créant une nouvelle entrée nommée d’après une class ajoutée à l’image.\nExemple :\nassets:\n  images:\n    responsive:\n      sizes:\n        default: 100vw\n        my_class: \"(max-width: 800px) 768px, 1024px\"\n![](\/image.jpg){.my_class}\nVous pouvez combiner les options formats et responsive.\nCSS class\nVous pouvez définir une valeur par défaut pour l’attribut class de chaque image avec l’option class.\nCaption\nLe titre optionnel peut être utilisé pour créer automatiquement une légende (figcaption) en activant l’option caption.\nExemple :\n![](\/images\/img.jpg \"Title\")\nEst converti en :\n&lt;figure&gt;\n  &lt;img src=\"\/image.jpg\" title=\"Title\"&gt;\n  &lt;figcaption&gt;Title&lt;\/figcaption&gt;\n&lt;\/figure&gt;\nLa légende prend en charge le contenu Markdown.\nImage localisée\nPour les pages traduites, Cecil recherche d’abord un fichier suffixé par la langue lors de la résolution des chemins d’image Markdown.\nExemple :\n![](\/images\/cecil-logo.png)\nAvec une page française (fr), Cecil essaie d’abord \/images\/cecil-logo.fr.png, puis revient à \/images\/cecil-logo.png.\nPlaceholder\nComme les images sont généralement des ressources plus lourdes et plus lentes, et qu’elles ne bloquent pas le rendu, il est préférable de donner aux utilisateurs quelque chose à voir pendant qu’ils attendent leur chargement.\nL’attribut placeholder accepte 2 options :\n\ncolor: affiche un fond coloré (basé sur la couleur dominante de l’image)\nlqip: Low-Quality Image Placeholder\n\nExemples :\n![](\/images\/img.jpg){placeholder=color}\n![](\/images\/img.jpg){placeholder=lqip}\nVous pouvez définir une valeur pour l’attribut placeholder de chaque image avec l’option placeholder.\nL’option lqip n’est pas compatible avec les GIF animés.\nTable des matières\nVous pouvez ajouter une table des matières avec la syntaxe Markdown suivante :\n[toc]\nPar défaut, la ToC extrait les en-têtes H2 et H3. Vous pouvez modifier ce comportement avec les options de body.\nExtrait\nUn extrait peut être défini dans le body avec l’une des balises suivantes : excerpt ou break.\nExemple :\nIntroduction.\n&lt;!-- excerpt --&gt;\nMain content.\nUtilisez ensuite le filtre excerpt_html dans votre template.\nNotes\nCréez un bloc de Note (info, astuce, important, etc.).\nExemple :\n:::tip\n**Tip:** This is advice.\n:::\nEst converti en :\n&lt;aside class=\"note note-tip\"&gt;\n  &lt;p&gt;\n    &lt;strong&gt;Tip:&lt;\/strong&gt; This is advice.\n  &lt;\/p&gt;\n&lt;\/aside&gt;\nTip: This is advice.\nAutres exemples :\nempty\ninfo\ntip\nimportant\nwarning\ncaution\nColoration syntaxique\nLa coloration syntaxique des blocs de code est activée par défaut avec l’option pages.body.highlight.\nSi besoin, vous pouvez la désactiver avec :\npages:\n  body:\n    highlight: false\nExemple :\n\n```php\necho \"Hello world\";\n```\n\nEst rendu en :\necho \"Hello world\";\nVous pouvez personnaliser le style de coloration syntaxique en créant votre propre thème. Consultez le guide des thèmes de Highlight.js.\nTexte inséré\nReprésente une plage de texte qui a été ajoutée.\n++text++\nEst converti en :\n&lt;ins&gt;text&lt;\/ins&gt;",
      "content_html": "<h1>Markdown</h1>\n<p>Cecil prend en charge le format <a href=\"http://daringfireball.net/projects/markdown/syntax\" target=\"_blank\" rel=\"noopener noreferrer\">Markdown</a>, ainsi que <a href=\"https://michelf.ca/projects/php-markdown/extra/\" target=\"_blank\" rel=\"noopener noreferrer\">Markdown Extra</a>.</p>\n<p>Cecil fournit aussi des <strong>fonctionnalités supplémentaires</strong> pour enrichir votre contenu, voir ci-dessous.</p>\n<h2 id=\"attributs\">Attributs</h2>\n<p>Avec <a href=\"https://michelf.ca/projects/php-markdown/extra/\" target=\"_blank\" rel=\"noopener noreferrer\">Markdown Extra</a>, vous pouvez définir un id, une classe et des attributs personnalisés sur certains éléments à l’aide d’un bloc d’attributs.<br>\nPar exemple, placez le(s) attribut(s) souhaité(s) après un en-tête, un bloc de code délimité, un lien ou une image en fin de ligne, entre accolades, comme ceci :</p>\n<pre><code class=\"language-markdown hljs markdown\" translate=\"no\"><span class=\"hljs-section\">## En-tête {#id .class attribute=value}</span></code></pre>\n<aside class=\"note note-warning\"><p>Pour un élément en ligne, comme un lien, vous devez utiliser un retour à la ligne après l’accolade fermante :</p>\n<pre><code class=\"language-markdown hljs markdown\" translate=\"no\">Lorem ipsum [<span class=\"hljs-string\">dolor</span>](<span class=\"hljs-link\">url</span>){attribute=value} \nsit amet.</code></pre></aside>\n<h2 id=\"liens\">Liens</h2>\n<p>Vous pouvez créer un lien avec la syntaxe <code translate=\"no\">[Texte](url)</code> ; <code translate=\"no\">url</code> peut être un chemin, un chemin relatif vers un fichier Markdown, une URL externe, etc.</p>\n<p><em>Exemple :</em></p>\n<pre><code class=\"language-markdown hljs markdown\" translate=\"no\">[<span class=\"hljs-string\">Link to a path</span>](<span class=\"hljs-link\">/about/</span>)\n[<span class=\"hljs-string\">Link to a Markdown file</span>](<span class=\"hljs-link\">/fr/a-propos/</span>)\n[<span class=\"hljs-string\">Link to Cecil website</span>](<span class=\"hljs-link\">https://cecil.app</span>)</code></pre>\n<aside class=\"note note-info\"><p>Un lien relatif vers un fichier Markdown est résolu depuis le dossier du fichier courant (comme sur GitHub), puis remplacé par l’URL de la page ciblée.</p></aside>\n<h3 id=\"lien-vers-une-page\">Lien vers une page</h3>\n<p>Vous pouvez facilement créer un lien vers une page avec la syntaxe <code translate=\"no\">[Titre de page](page:page-id)</code>.</p>\n<p><em>Exemple :</em></p>\n<pre><code class=\"language-markdown hljs markdown\" translate=\"no\">[<span class=\"hljs-string\">Link to a blog post</span>](<span class=\"hljs-link\">page:blog/post-1</span>)</code></pre>\n<h3 id=\"externe\">Externe</h3>\n<p>Par défaut, les liens externes ont la valeur suivante pour l’attribut <code translate=\"no\">rel</code> : <code translate=\"no\">noopener noreferrer</code>.</p>\n<p><em>Exemple :</em></p>\n<pre><code class=\"language-html hljs xml\" translate=\"no\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">a</span> <span class=\"hljs-attr\">href</span>=<span class=\"hljs-string\">\"&lt;url&gt;\"</span> <span class=\"hljs-attr\">rel</span>=<span class=\"hljs-string\">\"noopener noreferrer\"</span>&gt;</span>Link to another website<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">a</span>&gt;</span></code></pre>\n<p>Vous pouvez modifier ce comportement avec les <a href=\"../configuration/4-pages.fr.md#pages-body-links\">options <code translate=\"no\">pages.body.links.external</code></a>.</p>\n<h3 id=\"liens-integres\">Liens intégrés</h3>\n<p>Vous pouvez laisser Cecil essayer de transformer un lien en contenu embarqué en utilisant l’attribut <code translate=\"no\">{embed}</code> ou en activant l’option de configuration globale <code translate=\"no\">pages.body.links.embed.enabled</code> à <code translate=\"no\">true</code>.</p>\n<aside class=\"note note-important\"><p>Seuls les liens <strong>YouTube</strong>, <strong>Vimeo</strong>, <strong>Dailymotion</strong> et <strong>GitHub Gists</strong> sont pris en charge.</p></aside>\n<p><em>Exemple :</em></p>\n<pre><code class=\"language-markdown hljs markdown\" translate=\"no\">[<span class=\"hljs-string\">CECIL : LE générateur de SITES STATIQUES en PHP</span>](<span class=\"hljs-link\">https://www.youtube.com/watch?v=ur8koU0iYvc</span>){embed}</code></pre>\n<p><div style=\"position:relative;padding-bottom:56.25%;height:0;overflow:hidden;\">\n<iframe src=\"https://www.youtube-nocookie.com/embed/ur8koU0iYvc\" loading=\"lazy\" width=\"640\" height=\"360\" frameborder=\"0\" allow=\"accelerometer;autoplay;encrypted-media;gyroscope;picture-in-picture;fullscreen;web-share;\" allowfullscreen=\"\" style=\"position:absolute;top:0;left:0;width:100%;height:100%;border:0;background-color:#d8d8d8;\"></iframe>\n</div></p>\n<h4>Local video/audio files</h4>\n<p>Cecil peut aussi créer des éléments HTML vidéo et audio, selon l’extension du fichier.</p>\n<p><em>Exemple :</em></p>\n<pre><code class=\"language-markdown hljs markdown\" translate=\"no\">[<span class=\"hljs-string\">Video file</span>](<span class=\"hljs-link\">video.mp4</span>){embed controls poster=/images/video-test.png}\n[<span class=\"hljs-string\">Audio file</span>](<span class=\"hljs-link\">song.mp3</span>){embed controls}</code></pre>\n<p>Est converti en :</p>\n<pre><code class=\"language-html hljs xml\" translate=\"no\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">video</span> <span class=\"hljs-attr\">src</span>=<span class=\"hljs-string\">\"/video.mp4\"</span> <span class=\"hljs-attr\">controls</span> <span class=\"hljs-attr\">poster</span>=<span class=\"hljs-string\">\"/images/video-test.png\"</span> <span class=\"hljs-attr\">style</span>=<span class=\"hljs-string\">\"max-width:100%;height:auto;\"</span>&gt;</span><span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">video</span>&gt;</span>\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">audio</span> <span class=\"hljs-attr\">src</span>=<span class=\"hljs-string\">\"/song.mp3\"</span> <span class=\"hljs-attr\">controls</span>&gt;</span><span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">audio</span>&gt;</span></code></pre>\n<h2 id=\"images\">Images</h2>\n<p>Pour ajouter une image, utilisez un point d’exclamation (<code translate=\"no\">!</code>) suivi d’une description alternative entre crochets (<code translate=\"no\">[]</code>), puis du chemin ou de l’URL de l’image entre parenthèses (<code translate=\"no\">()</code>).<br>\nVous pouvez facultativement ajouter un titre entre guillemets.</p>\n<pre><code class=\"language-markdown hljs markdown\" translate=\"no\">![<span class=\"hljs-string\">Alternative description</span>](<span class=\"hljs-link\">/image.jpg \"Image title\"</span>)</code></pre>\n<aside class=\"note note-info\"><p>Le chemin doit être relatif à la racine de votre site Web (ex. : <code translate=\"no\">/image.jpg</code>), mais Cecil est capable de normaliser un chemin relatif aux répertoires <em>assets</em> et <em>static</em> (ex. : <code translate=\"no\">../../assets/image.jpg</code>).</p></aside>\n<h3 id=\"lazy-loading\">Lazy loading</h3>\n<p>Cecil ajoute l’attribut <code translate=\"no\">loading=\"lazy\"</code> à chaque image.</p>\n<p><em>Exemple :</em></p>\n<pre><code class=\"language-markdown hljs markdown\" translate=\"no\">![](/image.jpg)</code></pre>\n<p>Est converti en :</p>\n<pre><code class=\"language-html hljs xml\" translate=\"no\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">img</span> <span class=\"hljs-attr\">src</span>=<span class=\"hljs-string\">\"/image.jpg\"</span> <span class=\"hljs-attr\">loading</span>=<span class=\"hljs-string\">\"lazy\"</span>&gt;</span></code></pre>\n<aside class=\"note note-info\"><p>Vous pouvez désactiver ce comportement avec l’attribut <code translate=\"no\">{loading=eager}</code> ou avec l’<a href=\"../configuration/4-pages.fr.md#pages-body-images\">option <code translate=\"no\">lazy</code></a>.</p></aside>\n<h3 id=\"decoding\">Decoding</h3>\n<p>Cecil ajoute l’attribut <code translate=\"no\">decoding=\"async\"</code> à chaque image.</p>\n<p><em>Exemple :</em></p>\n<pre><code class=\"language-markdown hljs markdown\" translate=\"no\">![](/image.jpg)</code></pre>\n<p>Est converti en :</p>\n<pre><code class=\"language-html hljs xml\" translate=\"no\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">img</span> <span class=\"hljs-attr\">src</span>=<span class=\"hljs-string\">\"/image.jpg\"</span> <span class=\"hljs-attr\">decoding</span>=<span class=\"hljs-string\">\"async\"</span>&gt;</span></code></pre>\n<aside class=\"note note-info\"><p>Vous pouvez désactiver ce comportement avec l’attribut <code translate=\"no\">{decoding=auto}</code> ou avec l’<a href=\"../configuration/4-pages.fr.md#pages-body-images\">option <code translate=\"no\">decoding</code></a>.</p></aside>\n<h3 id=\"redimensionnement\">Redimensionnement</h3>\n<p>Chaque image du <em>body</em> peut être redimensionnée automatiquement en définissant une largeur inférieure à celle d’origine, avec l’attribut additionnel <code translate=\"no\">{width=X}</code>.</p>\n<p><em>Exemple :</em></p>\n<pre><code class=\"language-markdown hljs markdown\" translate=\"no\">![](/image.jpg){width=800}</code></pre>\n<p>Est converti en :</p>\n<pre><code class=\"language-html hljs xml\" translate=\"no\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">img</span> <span class=\"hljs-attr\">src</span>=<span class=\"hljs-string\">\"/thumbnails/800/image.jpg\"</span> <span class=\"hljs-attr\">width</span>=<span class=\"hljs-string\">\"800\"</span> <span class=\"hljs-attr\">height</span>=<span class=\"hljs-string\">\"600\"</span>&gt;</span></code></pre>\n<aside class=\"note note-info\"><p>Le ratio est conservé (l’attribut <code translate=\"no\">height</code> est calculé automatiquement), le fichier original n’est pas modifié et la version redimensionnée est stockée dans <code translate=\"no\">/thumbnails/&lt;width&gt;/</code>.</p></aside>\n<aside class=\"note note-important\"><p>Cette fonctionnalité nécessite une bibliothèque de traitement d’images : <a href=\"https://www.php.net/manual/book.imagick.php\" target=\"_blank\" rel=\"noopener noreferrer\">Imagick</a> est utilisé en priorité s’il est disponible (et capable de lire le JPEG et le PNG), puis <a href=\"https://www.libvips.org/\" target=\"_blank\" rel=\"noopener noreferrer\">libvips</a> (via l’extension PHP <a href=\"https://www.php.net/manual/book.ffi.php\" target=\"_blank\" rel=\"noopener noreferrer\">FFI</a>), et enfin <a href=\"https://www.php.net/manual/book.image.php\" target=\"_blank\" rel=\"noopener noreferrer\">GD</a> en dernier recours ; sinon, elle ajoute seulement un attribut HTML <code translate=\"no\">width</code> à la balise <code translate=\"no\">img</code>.</p></aside>\n<aside class=\"note note-info\"><p>Le support de libvips est optionnel et n’est pas inclus dans <code translate=\"no\">cecil.phar</code>. Pour l’utiliser, Cecil doit être installé avec <a href=\"https://getcomposer.org\" target=\"_blank\" rel=\"noopener noreferrer\">Composer</a> et il faut :</p>\n<ol>\n<li><a href=\"https://www.libvips.org/install.html\" target=\"_blank\" rel=\"noopener noreferrer\">libvips</a> installé sur le système</li>\n<li>l’extension PHP <a href=\"https://www.php.net/manual/book.ffi.php\" target=\"_blank\" rel=\"noopener noreferrer\">FFI</a> activée</li>\n<li>le paquet <code translate=\"no\">intervention/image-driver-vips</code> installé avec Cecil</li>\n</ol>\n<p>Si Cecil est une dépendance de votre projet (voir <a href=\"../developers/2-library.fr.md#support-de-libvips\">Bibliothèque</a>) :</p>\n<pre><code class=\"language-bash hljs bash\" translate=\"no\">composer require intervention/image-driver-vips</code></pre>\n<p>Si Cecil est installé globalement :</p>\n<pre><code class=\"language-bash hljs bash\" translate=\"no\">composer global require cecil/cecil intervention/image-driver-vips</code></pre></aside>\n<h3 id=\"formats\">Formats</h3>\n<p>Si l’<a href=\"../configuration/4-pages.fr.md#pages-body-images\">option <code translate=\"no\">formats</code></a> est définie, des images alternatives sont créées et ajoutées.</p>\n<p><em>Exemple :</em></p>\n<pre><code class=\"language-markdown hljs markdown\" translate=\"no\">![](/image.jpg)</code></pre>\n<p>Peut être converti en :</p>\n<pre><code class=\"language-html hljs xml\" translate=\"no\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">picture</span>&gt;</span>\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">source</span> <span class=\"hljs-attr\">srcset</span>=<span class=\"hljs-string\">\"/image.avif\"</span> <span class=\"hljs-attr\">type</span>=<span class=\"hljs-string\">\"image/avif\"</span>&gt;</span>\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">source</span> <span class=\"hljs-attr\">srcset</span>=<span class=\"hljs-string\">\"/image.webp\"</span> <span class=\"hljs-attr\">type</span>=<span class=\"hljs-string\">\"image/webp\"</span>&gt;</span>\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">img</span> <span class=\"hljs-attr\">src</span>=<span class=\"hljs-string\">\"/image.jpg\"</span>&gt;</span>\n<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">picture</span>&gt;</span></code></pre>\n<aside class=\"note note-important\"><p>Veuillez noter que <strong>tous les formats d’image</strong> ne sont pas toujours inclus dans les extensions d’image PHP.</p></aside>\n<h3 id=\"responsive\">Responsive</h3>\n<p>Si l’<a href=\"../configuration/4-pages.fr.md#pages-body-images\">option <code translate=\"no\">responsive</code></a> est activée, alors toutes les images du <em>body</em> seront automatiquement rendues « responsive ».</p>\n<p><em>Exemple :</em></p>\n<pre><code class=\"language-markdown hljs markdown\" translate=\"no\">![](/image.jpg){width=800}</code></pre>\n<p>sera converti en :</p>\n<pre><code class=\"language-html hljs xml\" translate=\"no\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">img</span> <span class=\"hljs-attr\">src</span>=<span class=\"hljs-string\">\"/thumbnails/800/image.jpg\"</span> <span class=\"hljs-attr\">width</span>=<span class=\"hljs-string\">\"800\"</span> <span class=\"hljs-attr\">height</span>=<span class=\"hljs-string\">\"600\"</span>\n  <span class=\"hljs-attr\">srcset</span>=<span class=\"hljs-string\">\"/thumbnails/320/image.jpg 320w,\n          /thumbnails/640/image.jpg 640w,\n          /thumbnails/800/image.jpg 800w\"</span>\n  <span class=\"hljs-attr\">sizes</span>=<span class=\"hljs-string\">\"100vw\"</span>\n&gt;</span></code></pre>\n<aside class=\"note note-info\"><p>Comme une image du body est convertie en <a href=\"../assets/index.fr.md#asset\">Asset</a>, les différentes largeurs doivent être définies dans la <a href=\"../configuration/6-assets.fr.md\">configuration des assets</a>.</p></aside>\n<p>L’attribut <code translate=\"no\">sizes</code> prend la valeur de l’option de configuration <code translate=\"no\">assets.images.responsive.sizes.default</code>, mais peut être modifié en créant une nouvelle entrée nommée d’après une <em>class</em> ajoutée à l’image.</p>\n<p><em>Exemple :</em></p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">assets:</span>\n  <span class=\"hljs-attr\">images:</span>\n    <span class=\"hljs-attr\">responsive:</span>\n      <span class=\"hljs-attr\">sizes:</span>\n        <span class=\"hljs-attr\">default:</span> <span class=\"hljs-string\">100vw</span>\n        <span class=\"hljs-attr\">my_class:</span> <span class=\"hljs-string\">\"(max-width: 800px) 768px, 1024px\"</span></code></pre>\n<pre><code class=\"language-markdown hljs markdown\" translate=\"no\">![](/image.jpg){.my_class}</code></pre>\n<aside class=\"note note-info\"><p>Vous pouvez combiner les options <code translate=\"no\">formats</code> et <code translate=\"no\">responsive</code>.</p></aside>\n<h3 id=\"css-class\">CSS class</h3>\n<p>Vous pouvez définir une valeur par défaut pour l’attribut <code translate=\"no\">class</code> de chaque image avec l’<a href=\"../configuration/4-pages.fr.md#pages-body-images\">option <code translate=\"no\">class</code></a>.</p>\n<h3 id=\"caption\">Caption</h3>\n<p>Le titre optionnel peut être utilisé pour créer automatiquement une légende (<code translate=\"no\">figcaption</code>) en activant l’<a href=\"../configuration/4-pages.fr.md#pages-body-images\">option <code translate=\"no\">caption</code></a>.</p>\n<p><em>Exemple :</em></p>\n<pre><code class=\"language-markdown hljs markdown\" translate=\"no\">![](/images/img.jpg \"Title\")</code></pre>\n<p>Est converti en :</p>\n<pre><code class=\"language-html hljs xml\" translate=\"no\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">figure</span>&gt;</span>\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">img</span> <span class=\"hljs-attr\">src</span>=<span class=\"hljs-string\">\"/image.jpg\"</span> <span class=\"hljs-attr\">title</span>=<span class=\"hljs-string\">\"Title\"</span>&gt;</span>\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">figcaption</span>&gt;</span>Title<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">figcaption</span>&gt;</span>\n<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">figure</span>&gt;</span></code></pre>\n<aside class=\"note note-info\"><p>La légende prend en charge le contenu Markdown.</p></aside>\n<h3 id=\"image-localisee\">Image localisée</h3>\n<p>Pour les pages traduites, Cecil recherche d’abord un fichier suffixé par la langue lors de la résolution des chemins d’image Markdown.</p>\n<p><em>Exemple :</em></p>\n<pre><code class=\"language-markdown hljs markdown\" translate=\"no\">![](/images/cecil-logo.png)</code></pre>\n<p>Avec une page française (<code translate=\"no\">fr</code>), Cecil essaie d’abord <code translate=\"no\">/images/cecil-logo.fr.png</code>, puis revient à <code translate=\"no\">/images/cecil-logo.png</code>.</p>\n<h3 id=\"placeholder\">Placeholder</h3>\n<p>Comme les images sont généralement des ressources plus lourdes et plus lentes, et qu’elles ne bloquent pas le rendu, il est préférable de donner aux utilisateurs quelque chose à voir pendant qu’ils attendent leur chargement.</p>\n<p>L’attribut <code translate=\"no\">placeholder</code> accepte 2 options :</p>\n<ol>\n<li><code translate=\"no\">color</code>: affiche un fond coloré (basé sur la couleur dominante de l’image)</li>\n<li><code translate=\"no\">lqip</code>: <a href=\"https://www.guypo.com/introducing-lqip-low-quality-image-placeholders\" target=\"_blank\" rel=\"noopener noreferrer\">Low-Quality Image Placeholder</a></li>\n</ol>\n<p><em>Exemples :</em></p>\n<pre><code class=\"language-markdown hljs markdown\" translate=\"no\">![](/images/img.jpg){placeholder=color}\n![](/images/img.jpg){placeholder=lqip}</code></pre>\n<aside class=\"note note-tip\"><p>Vous pouvez définir une valeur pour l’attribut <code translate=\"no\">placeholder</code> de chaque image avec l’<a href=\"../configuration/4-pages.fr.md#pages-body-images\">option <code translate=\"no\">placeholder</code></a>.</p></aside>\n<aside class=\"note note-warning\"><p>L’option <code translate=\"no\">lqip</code> n’est pas compatible avec les GIF animés.</p></aside>\n<h2 id=\"table-des-matieres\">Table des matières</h2>\n<p>Vous pouvez ajouter une table des matières avec la syntaxe Markdown suivante :</p>\n<pre><code class=\"language-markdown hljs markdown\" translate=\"no\">[toc]</code></pre>\n<aside class=\"note note-info\"><p>Par défaut, la ToC extrait les en-têtes H2 et H3. Vous pouvez modifier ce comportement avec les <a href=\"../configuration/4-pages.fr.md#pages-body\">options de body</a>.</p></aside>\n<h2 id=\"extrait\">Extrait</h2>\n<p>Un extrait peut être défini dans le <em>body</em> avec l’une des balises suivantes : <code translate=\"no\">excerpt</code> ou <code translate=\"no\">break</code>.</p>\n<p><em>Exemple :</em></p>\n<pre><code class=\"language-html hljs xml\" translate=\"no\">Introduction.\n<span class=\"hljs-comment\">&lt;!-- excerpt --&gt;</span>\nMain content.</code></pre>\n<p>Utilisez ensuite le filtre <a href=\"../templates/reference/3-filters.fr.md#excerpt-html\"><code translate=\"no\">excerpt_html</code></a> dans votre template.</p>\n<h2 id=\"notes\">Notes</h2>\n<p>Créez un bloc de <em>Note</em> (info, astuce, important, etc.).</p>\n<p><em>Exemple :</em></p>\n<pre><code class=\"language-markdown hljs markdown\" translate=\"no\">:::tip\n<span class=\"hljs-strong\">**Tip:**</span> This is advice.\n:::</code></pre>\n<p>Est converti en :</p>\n<pre><code class=\"language-html hljs xml\" translate=\"no\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">aside</span> <span class=\"hljs-attr\">class</span>=<span class=\"hljs-string\">\"note note-tip\"</span>&gt;</span>\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">p</span>&gt;</span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">strong</span>&gt;</span>Tip:<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">strong</span>&gt;</span> This is advice.\n  <span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">p</span>&gt;</span>\n<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">aside</span>&gt;</span></code></pre>\n<aside class=\"note note-tip\"><p><strong>Tip:</strong> This is advice.</p></aside>\n<p><em>Autres exemples :</em></p>\n<aside class=\"note\"><p>empty</p></aside>\n<aside class=\"note note-info\"><p>info</p></aside>\n<aside class=\"note note-tip\"><p>tip</p></aside>\n<aside class=\"note note-important\"><p>important</p></aside>\n<aside class=\"note note-warning\"><p>warning</p></aside>\n<aside class=\"note note-caution\"><p>caution</p></aside>\n<h2 id=\"coloration-syntaxique\">Coloration syntaxique</h2>\n<p>La coloration syntaxique des blocs de code est activée par défaut avec l’option <a href=\"../configuration/4-pages.fr.md#pages-body-highlight\">pages.body.highlight</a>.</p>\n<p>Si besoin, vous pouvez la désactiver avec :</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">pages:</span>\n  <span class=\"hljs-attr\">body:</span>\n    <span class=\"hljs-attr\">highlight:</span> <span class=\"hljs-literal\">false</span></code></pre>\n<p><em>Exemple :</em></p>\n<pre>\n```php\necho \"Hello world\";\n```\n</pre>\n<p>Est rendu en :</p>\n<pre><code class=\"language-php hljs php\" translate=\"no\"><span class=\"hljs-keyword\">echo</span> <span class=\"hljs-string\">\"Hello world\"</span>;</code></pre>\n<aside class=\"note note-info\"><p>Vous pouvez personnaliser le style de coloration syntaxique en créant votre propre thème. Consultez le <a href=\"https://highlightjs.readthedocs.io/en/latest/theme-guide.html\" target=\"_blank\" rel=\"noopener noreferrer\">guide des thèmes de Highlight.js</a>.</p></aside>\n<h2 id=\"texte-insere\">Texte inséré</h2>\n<p>Représente une plage de texte qui a été ajoutée.</p>\n<pre><code class=\"language-markdown hljs markdown\" translate=\"no\">++text++</code></pre>\n<p>Est converti en :</p>\n<pre><code class=\"language-html hljs xml\" translate=\"no\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">ins</span>&gt;</span>text<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">ins</span>&gt;</span></code></pre>",
      "language": "fr"
    },
    {
      "id": "https://cecil.app/fr/documentation/contenu/multilingue/",
      "url": "https://cecil.app/fr/documentation/contenu/multilingue/",
      "title": "Multilingue",
      "summary": "Traduisez les pages via le nom de fichier ou le front matter et liez les pages traduites.",
      "date_published": "2026-03-27T00:00:00+00:00",
      "date_modified": "2026-10-03T00:00:00+00:00","content_text": "Multilingue\nSi vos pages sont disponibles en plusieurs langues, il existe 2 façons différentes de le définir :\nVia le nom de fichier\nC’est la méthode la plus courante pour traduire une page depuis la langue principale vers une autre langue.\nIl suffit de dupliquer la page de référence et de lui ajouter en suffixe le code de la langue cible (ex. : fr).\nExemple :\n├─ about.md    # the reference page\n└─ about.fr.md # the french version (`fr`)\nVous pouvez changer l’URL de la page traduite avec la variable slug dans le front matter. Par exemple :\n---\nslug: a-propos\n---\n# about.md    -&gt; \/about\/\n# about.fr.md -&gt; \/fr\/a-propos\/\nVia le front matter\nSi vous souhaitez créer une page dans une langue autre que la langue principale, sans qu’elle soit la traduction d’une page existante, vous pouvez utiliser la variable language dans son front matter.\nExemple :\n---\nlanguage: fr\n---\nLier les pages traduites\nChaque page traduite référence les pages dans les autres langues.\nCette collection de pages est disponible dans les templates via la variable suivante :\n{{ page.translations }}\nLa variable langref est fournie par défaut, mais vous pouvez la modifier dans le front matter :\n---\nlangref: my-page-ref\n---",
      "content_html": "<h1>Multilingue</h1>\n<p>Si vos pages sont disponibles en plusieurs <a href=\"../configuration/2-languages.fr.md#languages\">langues</a>, il existe 2 façons différentes de le définir :</p>\n<h2 id=\"via-le-nom-de-fichier\">Via le nom de fichier</h2>\n<p>C’est la méthode la plus courante pour traduire une page depuis la <a href=\"../configuration/2-languages.fr.md#language\">langue</a> principale vers une autre langue.</p>\n<p>Il suffit de dupliquer la page de référence et de lui ajouter en suffixe le <code translate=\"no\">code</code> de la langue cible (ex. : <code translate=\"no\">fr</code>).</p>\n<p><em>Exemple :</em></p>\n<pre><code class=\"language-plaintext hljs plaintext\" translate=\"no\">├─ about.md    # the reference page\n└─ about.fr.md # the french version (`fr`)</code></pre>\n<aside class=\"note note-tip\"><p>Vous pouvez changer l’URL de la page traduite avec la variable <code translate=\"no\">slug</code> dans le front matter. Par exemple :</p>\n<pre><code class=\"language-yml hljs yaml\" translate=\"no\"><span class=\"hljs-meta\">---</span>\n<span class=\"hljs-attr\">slug:</span> <span class=\"hljs-string\">a-propos</span>\n<span class=\"hljs-meta\">---</span>\n<span class=\"hljs-comment\"># about.md    -&gt; /about/</span>\n<span class=\"hljs-comment\"># about.fr.md -&gt; /fr/a-propos/</span></code></pre></aside>\n<h2 id=\"via-le-front-matter\">Via le front matter</h2>\n<p>Si vous souhaitez créer une page dans une langue autre que la langue principale, sans qu’elle soit la traduction d’une page existante, vous pouvez utiliser la variable <code translate=\"no\">language</code> dans son front matter.</p>\n<p><em>Exemple :</em></p>\n<pre><code class=\"language-yml hljs yaml\" translate=\"no\"><span class=\"hljs-meta\">---</span>\n<span class=\"hljs-attr\">language:</span> <span class=\"hljs-string\">fr</span>\n<span class=\"hljs-meta\">---</span></code></pre>\n<h2 id=\"lier-les-pages-traduites\">Lier les pages traduites</h2>\n<p>Chaque page traduite référence les pages dans les autres langues.</p>\n<p>Cette collection de pages est disponible dans les <a href=\"../templates/2-variables.fr.md#page\">templates</a> via la variable suivante :</p>\n<pre><code class=\"language-twig hljs twig\" translate=\"no\"><span class=\"hljs-template-variable\">{{ page.translations }}</span></code></pre>\n<aside class=\"note note-info\"><p>La variable <code translate=\"no\">langref</code> est fournie par défaut, mais vous pouvez la modifier dans le front matter :</p>\n<pre><code class=\"language-yml hljs yaml\" translate=\"no\"><span class=\"hljs-meta\">---</span>\n<span class=\"hljs-attr\">langref:</span> <span class=\"hljs-string\">my-page-ref</span>\n<span class=\"hljs-meta\">---</span></code></pre></aside>",
      "language": "fr"
    },
    {
      "id": "https://cecil.app/fr/documentation/contenu/contenu-dynamique/",
      "url": "https://cecil.app/fr/documentation/contenu/contenu-dynamique/",
      "title": "Contenu dynamique",
      "summary": "Utilisez des variables et expressions Twig dans le contenu des pages.",
      "date_published": "2026-03-27T00:00:00+00:00",
      "date_modified": "2026-10-03T00:00:00+00:00","content_text": "Contenu dynamique\nVous pouvez créer du contenu dynamique dans une page en utilisant la fonction Twig template_from_string.\n{{ include(template_from_string(page.content, \"contenu dynamique pour la page \" ~ page.id)) }}\nAvec cette approche, vous pouvez utiliser n’importe quelle variable de page dans le body de la page.\n--\nvar: 'value'\n---\nLa valeur de `var` est {{ page.var }}.",
      "content_html": "<h1>Contenu dynamique</h1>\n<p>Vous pouvez créer du contenu dynamique dans une page en utilisant la fonction Twig <a href=\"https://twig.symfony.com/doc/3.x/functions/template_from_string.html\" target=\"_blank\" rel=\"noopener noreferrer\"><code translate=\"no\">template_from_string</code></a>.</p>\n<pre><code class=\"language-twig hljs twig\" translate=\"no\"><span class=\"hljs-template-variable\">{{ <span class=\"hljs-name\">include</span><span class=\"hljs-params\">(template_from_string(page.content, \"contenu dynamique pour la page \" ~ page.id)</span>) }}</span></code></pre>\n<p>Avec cette approche, vous pouvez utiliser n’importe quelle variable de page dans le <em>body</em> de la page.</p>\n<pre><code class=\"language-twig hljs twig\" translate=\"no\"><span class=\"xml\">--\nvar: 'value'\n---\nLa valeur de `var` est </span><span class=\"hljs-template-variable\">{{ page.var }}</span><span class=\"xml\">.</span></code></pre>",
      "language": "fr"
    }
  ]
}
