Handlebars

Neleto verfügt über eine eigene Template-Engine auf Basis von Handlebars

Syntax

Der Großteil der Syntax entspricht Handlebars, wurde jedoch um einige Verbesserungen erweitert.

Variablen

Variablen können im Template mit folgender Syntax ausgegeben werden:

{{ variable }}
{{ variable.property }}

Block-Helfer

if

Bedingte Ausgabe

{{#if nullable_variable as variable }}
    <!-- Aktion ausführen, `variable` ist hier als Non-Nullable von `nullable_variable` verfügbar -->
{{else if other_nullable_variable as variable }}
    <!-- Alternative Aktion, `variable` ist hier als Non-Nullable von `other_nullable_variable` verfügbar -->
{{else}}
    <!-- Fallback-Aktion -->
{{/if}}

Each (Schleifen)

Über Listen iterieren und den Inhalt für jedes Element ausgeben

{{#each variable as item }} <!-- `item` kann ein beliebiger Bezeichner sein -->
    <!-- Aktion für jede Iteration ausführen -->
    <!-- Das aktuelle Element ist unter `item` verfügbar -->
    {{ item }}
{{else}}
    <!-- Aktion ausführen, wenn `variable` leer ist -->
{{/each}}

With

Einen neuen Kontext mit einer neuen Variable erstellen

{{#with properties.content as content}}
    <!-- `content` ist nun der Wert von `properties.content` -->
    {{ render_markdown(content) }}
{{/with}}

Inline-Helfer

Dies unterscheidet sich von Inline-Helfern in Handlebars, da Neleto verlangt, dass Argumente in Klammern eingeschlossen werden:

{{ render_elements(page.elements) }}

oder mit mehreren Argumenten, getrennt durch Kommas:

{{ date(page.created_at, "%Y") }}

Eingebaute Helfer

Neletos Template-Sprache enthält einige eingebaute Helfer, die in Templates verwendet werden können.

render_elements

Dieser Helfer gibt ein Array von Elementen aus.

{{ render_elements(page.elements) }}
{{ render_elements(children) }}

date

Dieser Helfer formatiert Datumsangaben mit dem angegebenen Format.

{{ date(page.created_at, "%Y") }}

Eine Übersicht der verfügbaren Optionen für das zweite Argument findet sich unter Chrono (docs.rs).

Häufige Format-Bezeichner:

BezeichnerBeschreibungBeispiel
%Y4-stelliges Jahr2024
%y2-stelliges Jahr24
%mMonat (01-12)01
%BVollständiger MonatsnameJanuary
%bAbgekürzter MonatsnameJan
%dTag (01-31)15
%HStunde, 24h (00-23)14
%IStunde, 12h (01-12)02
%MMinuten (00-59)30
%SSekunden (00-59)05
%pAM / PMPM
%AVollständiger WochentagMonday
%aAbgekürzter WochentagMon

render_markdown

Gibt einen Markdown-String als HTML aus.

{{ render_markdown(properties.content) }}

sanitize

Bereinigt einen Eingabe-String von HTML.

{{ sanitize(properties.html_code) }}

render_structured_data

Gibt strukturierte Daten eines Blogbeitrags aus.

{{ render_structured_data(relations.post) }}

image_path

Gibt einen Pfad zu einem Bild mit Parametern aus.

{{ image_path(relation.image, "f_webp") }}

Alle verfügbaren Optionen (Größe, Format, Qualität usw.) sind auf der Seite Bild-Skalierung dokumentiert.

file_path

Gibt einen Pfad zu einer Datei ohne Parameter aus.

{{ file_path(relations.file) }}

render_meta_tag

Gibt ein Meta-Tag der Seite oder der Einstellungen aus.

{{ render_meta_tag(meta_tag) }}

stringify

Wandelt einen beliebigen Wert in JSON um.

{{ stringify(properties) }}

render

Gibt einen beliebigen Wert mit Handlebars und dem aktuellen Kontext aus.

{{ render(properties.handlebars) }}