What's on this page
Variables
The application passes variables to the templates for manipulation in the template. Variables may have attributes or elements you can access, too.
Use a dot (.) to access attributes of a variable:{{ foo.bar }}
You can use variables from different scopes: site, page, cecil.
site
The site variable contains built-in variables and those set in the configuration.
| Variable | Description |
|---|---|
site.pages |
Collection of all pages, in the current language. |
site.allpages |
Collection of all pages, in all languages. |
site.page(id) |
A page with the given ID. |
site.taxonomies |
Collection of vocabularies. |
site.home |
ID of the home page. |
site.time |
Current Timestamp. |
site.debug |
Debug mode status (true or false). |
site.build |
Current build ID. |
Example:
title: "My amazing website!"
Can be displayed in a template with:
{{ site.title }}
site.menus
Loop on site.menus.<menu> to get each entry of the <menu> collection (e.g.: main).
| Variable | Description |
|---|---|
<entry>.name |
Entry name. |
<entry>.url |
Entry URL. |
<entry>.weight |
Entry weight (useful to sort menu entries). |
Example:
<nav>
<ol>
{% for entry in site.menus.main|sort_by_weight %}
<li><a href="{{ url(entry.url) }}" data-weight="{{ entry.weight }}">{{ entry.name }}</a></li>
{% endfor %}
</ol>
</nav>
site.language
Information about the current language.
| Variable | Description |
|---|---|
site.language |
Language code (e.g.: en). |
site.language.name |
Language name (e.g.: English). |
site.language.locale |
Language locale code (e.g.: en_US). |
site.language.weight |
Language position in the languages list. |
site.static
The static files collection can be accessed via site.static if the static load is enabled.
Each file exposes the following properties:
path: relative path (e.g.:/images/img-1.jpg)date: creation date (timestamp)updated: modification date (timestamp)name: name (e.g.:img-1.jpg)basename: name without extension (e.g.:img-1)ext: extension (e.g.:jpg)type: media type (e.g.:image)subtype: media sub type (e.g.:image/jpeg)exif: image EXIF data (array)audio: Mp3Info objectvideo: array of basic video information (duration in seconds, width and height)
site.data
A data collection can be accessed via site.data.<filename> (without file extension).
Examples:
data/authors.yml:site.data.authorsdata/authors.fr.yml:site.data.authors(ifsite.language= "fr")data/galleries/gallery-1.json:site.data.galleries['gallery-1']
page
The page variable contains built-in variables of a page and those set in the front matter.
| Variable | Description | Example |
|---|---|---|
page.id |
Unique identifier. | blog/post-1 |
page.title |
File name (without extension). | Post 1 |
page.date |
File creation date. | DateTime |
page.body |
File body. | Markdown |
page.content |
File body converted in HTML. | HTML |
page.section |
File root folder (slugified). | blog |
page.path |
File path (slugified). | blog/post-1 |
page.slug |
File name (slugified). | post-1 |
page.filepath |
File system path. | Blog/Post 1.md |
page.type |
homepage, page, section, vocabulary or term. |
page |
page.pages |
Collection of all sub pages. | Collection |
page.translations |
Collection of translated pages. | Collection |
Nested sections
In a nested sections context, page.parent, page.ancestors, page.sections and page.toplevel help you build navigation.
| Variable | Description | Example |
|---|---|---|
page.parent |
Parent section's page (null if none). |
Page |
page.ancestors |
Collection of ancestor sections (nearest first). | Collection |
page.sections |
Collection of immediate descendant sections. | Collection |
page.toplevel |
true if the page is a top level section. |
Boolean |
Breadcrumb (from the home page to the current page):
<nav aria-label="breadcrumb">
<ul>
<li><a href="{{ url(site.home) }}">{{ site.title }}</a></li>
{% for section in page.ancestors|reverse %}
<li><a href="{{ url(section) }}">{{ section.title }}</a></li>
{% endfor %}
{% if page.id != site.home %}
<li><a href="{{ url(page) }}" aria-current="page">{{ page.title }}</a></li>
{% endif %}
</ul>
</nav>
Sub-sections menu (immediate descendant sections of the current section):
{% if page.sections|length %}
<ul>
{% for section in page.sections|sort_by_title %}
<li><a href="{{ url(section) }}">{{ section.title }}</a></li>
{% endfor %}
</ul>
{% endif %}
Main navigation limited to top level sections (from any page):
<nav>
{% for section in site.page(site.home).sections|sort_by_title %}
<a href="{{ url(section) }}">{{ section.title }}</a>
{% endfor %}
</nav>
Link to the parent section:
{% if page.parent %}
<a href="{{ url(page.parent) }}">← {{ page.parent.title }}</a>
{% endif %}
page.<prev/next>
Navigation between pages within the same section, sorted according to the section's sortby (chronological order for dates).
With sub-sections, navigation follows the sections tree: the pages of a top level Section and of all its sub-sections are chained, each sub-section (its index page) being placed among the pages of its parent Section and followed by its own pages.
| Variable | Description | Example |
|---|---|---|
page.prev |
Previous page. | Page |
page.next |
Next page. | Page |
Example:
<a href="{{ url(page.prev) }}">{{ page.prev.title }}</a>
page.paginator
Paginator helps you build navigation for list pages: homepage, sections, and taxonomies.
| Variable | Description |
|---|---|
page.paginator.pages |
Pages Collection. |
page.paginator.pages_total |
Number total of pages. |
page.paginator.count |
Number of paginator's pages. |
page.paginator.current |
Position index of the current page. |
page.paginator.links.first |
Page ID of the first page. |
page.paginator.links.prev |
Page ID of the previous page. |
page.paginator.links.self |
Page ID of the current page. |
page.paginator.links.next |
Page ID of the next page. |
page.paginator.links.last |
Page ID of the last page. |
page.paginator.links.path |
Page ID without the position index. |
Example:
{% if page.paginator %}
<div>
{% if page.paginator.links.prev is defined %}
<a href="{{ url(page.paginator.links.prev) }}">Previous</a>
{% endif %}
{% if page.paginator.links.next is defined %}
<a href="{{ url(page.paginator.links.next) }}">Next</a>
{% endif %}
</div>
{% endif %}
Example:
{% if page.paginator %}
<div>
{% for paginator_index in 1..page.paginator.count %}
{% if paginator_index != page.paginator.current %}
{% if paginator_index == 1 %}
<a href="{{ url(page.paginator.links.first) }}">{{ paginator_index }}</a>
{% else %}
<a href="{{ url(page.paginator.links.path ~ '/' ~ paginator_index) }}">{{ paginator_index }}</a>
{% endif %}
{% else %}
{{ paginator_index }}
{% endif %}
{% endfor %}
</div>
{% endif %}
Taxonomy
Variables available in vocabulary and term templates.
Vocabulary
Page /<plural>/ (e.g.: /categories/).
| Variable | Description |
|---|---|
page.plural |
Vocabulary name in plural form. |
page.singular |
Vocabulary name in singular form. |
page.terms |
List of terms (Collection). |
Each term of page.terms provides term.id (term ID, e.g.: categories/php), term.name (term name, e.g.: PHP) and the number of its pages with term|length.
Term
Page /<plural>/<term>/ (e.g.: /categories/php/).
| Variable | Description |
|---|---|
page.title |
Term name. |
page.term |
Term ID (e.g.: categories/php). |
page.plural |
Vocabulary name in plural form. |
page.singular |
Vocabulary name in singular form. |
page.pages |
List of pages in this term, sorted by date (Collection). |
Taxonomy example
Configuration:
taxonomies:
categories: category
Page front matter:
---
categories: ["Data Sovereignty"]
---
List of terms (/categories/), in layouts/taxonomy/categories.html.twig:
{% extends 'page.html.twig' %}
{% block content %}
<h1>{{ page.title }}</h1>
<ul>
{% for term in page.terms %}
<li><a href="{{ url(term.id) }}">{{ term.name }}</a> ({{ term|length }})</li>
{% endfor %}
</ul>
{% endblock %}
List of pages of a term (/categories/data-sovereignty/), in layouts/taxonomy/category.html.twig:
{% extends 'page.html.twig' %}
{% block content %}
<h1>{{ page.title }}</h1>
{% for p in page.paginator.pages ?? page.pages %}
<article>
<h2><a href="{{ url(p) }}">{{ p.title }}</a></h2>
</article>
{% endfor %}
<a href="{{ url(page.plural) }}">All {{ page.plural }}</a>
{% endblock %}
Links to the terms of the current page, in a page template:
{% for category in page.categories ?? [] %}
<a href="{{ url('categories/' ~ category) }}">{{ category }}</a>
{% endfor %}
cecil
| Variable | Description |
|---|---|
cecil.url |
URL of the Cecil website. |
cecil.version |
Cecil current version. |
cecil.poweredby |
Print Cecil v%s, with %s is the current version. |