Zum Hauptinhalt springen

Hugo Frontmatter Formate

·2 min

Verwirrend für mich waren am Anfang die als “Front Matter” bezeichneten Header in den Content-Dateien von Hugo.

Dazu kommt noch diese Intention, scheinbar alle möglichen Formate zu unterstützen.

Den Content kann man ja - ganz nach Vorlieben - in Markdown, ReText oder auch in HTML verfassen.
So weit, so gut. Zudem bringt die Möglichkeit in einer MarkDown-Datei auch einfach HTML zu schreiben, einige Vorteile.

Mir erschließt sich auch der Vorteil, die Metadaten eines Artikels oder einer Seite mit dem eigentlichen Content in einer Datei zu bündeln, denn dazu dient der Front Matter Header.

Aber daß dieser Standardmäßig in YAML erzeugt wird, die zentrale Config-Datei von Hugo jedoch in TOML ist mir ein Rätsel.

Freilich kann man das alles ändern, es geht ja auch noch JSON. Aber warum hier nicht einfach das gleiche Format wählen?

Die Config-Datei wird wohl anhand der Extension (in meinem Fall .toml) erkannt.
Da die Content-Dateien ja aber nach dem Format des Contents benannt werden, also in der Regel .md für MardDown, muß das Format des Headers anders bestimmt werden. Ausserdem muß ja auch der Header vom eigentlichen Content der Datei getrennt werden.
Genau dieser Trenner, bestehend aus einer Zeile mit 3 aufeinanderfolgenden gleichen Zeichen, bestimmt sowohl das Front Matter Format, als auch den Header Bereich:

  • 3 Minus-Zeichen - YAML-Header:
  • 3 Plus-Zeichen - TOML-Header: Beschränkt sich der Unterschied bei den Formaten bei einfachen Variablen, wie z.B. dem Titel einer Seite, lediglich auf das Zeichen welches den Namen der Variablen vom Inhalt trennt, so wird es bei hierarchischen oder mehrdimensionalen Variablen komplizierter.

Hier ein Beispiel für einen Front Matter Header in YAML:

---
title: "Impressum"
menu: main
weight: 5
date: 2022-09-06
hideMeta: true
description: "the legal stuff"
tags:
- impressum
- legal
- imprint
---

Und so sieht es in TOML aus:

+++
title = 'Datenschutzerklärung'
description = 'Umgang mit Datenschutzbelangen'
hideMeta = true
tags = ["impressum", "legal", "imprint", "data-protection", "GDPR"]
headerbg = '/img/bg-gdpr-dsgvo.png'
[menu]
    [menu.main]
        weight = 6
        name = 'Datenschutz'
+++

Das findet man ja alles noch recht schnell unter: Hugo Front Matter Documentation, aber wie ich z.B. einen Menüpunkt für das englische main-menu definiere, habe ich noch nicht herausgefunden…