Außer den Inhalten selbst gibt es auch noch die jeweiligen
Übersichtsseiten, mit dem Prädikat section.
So eine Übersichtsseite wird in ihrem Ordner durch die Datei _index.md
beschrieben.
Unterhalb der root section “Know-how” kümmert sich das Script layouts/knowhow/list.html
um die Darstellung dieser Inhalte.
Das Script beginnt mit dem üblichen “Überbau” für eine Seite und einer
dazwischen eingefädelten Konstantendefinition ($maxChars
).
{{ define "main" }}
{{ $maxChars := 320 }}
<div class="padding highlightable">
{{ partial "topbar.html" . }}
<div id="body-inner">
Direkt danach kommt auch schon der Titel und der Inhalt aus der jeweiligen
_index.md
-Datei.
<h1>{{.Title}}</h1>
{{ .Content }}
Nun arbeitet sich das Script durch alle weiteren Unterseiten (sections), um sie aufzulisten und mit einer kurzen Inhaltsangabe zu versehen.
{{ range .Sections }}
<hr>
<h4>
<a href = "{{ .RelPermalink }}"> <i class="far fa-folder-open"></i> </a>
-
<a href = "{{ .RelPermalink }}" style = "color: Black;"> {{ .Title }} </a>
</h4>
<p>{{ .Summary | markdownify | safeHTML | truncate $maxChars }}</p>
<a href = "{{ .RelPermalink }}">Abschnitt öffnen</a>
{{ end }}
Für jede section gibt es zuerst eine horizontale Trennlinie (<hr>
),
dann folgt der klickbare Eintrag als Überschrift (<h4>...</h4>
) mit Icon
aus Fontawesome davor.
Dabei ist es Absicht, nur das Icon in ‘Linkfarbe’ darzustellen, den Seitentitel
jedoch stattdessen schwarz zu setzen.
Der beschreibende Text der Unter_section_ wird mittels .Summary
geholt,
durch den Markdown-Prozessor geschleust (markdownify
), das entstandene HTML
als ‘sicher, als solches weitergeben’ (safeHTML
) erklärt und schließlich
auf die eingangs definierte Länge $maxChars
zurechtgestutzt.
Dabei passt Hugo auf, dass keine Worte mittendrin abgeschnitten werden.
Dann gibt es nochmal einen Link zur _section_.
Der ist für die Leute mit dem ganz kleinen Bildschirm gedacht - so muss man
nach dem Lesen der Einleitung nicht wieder hochscrollen.
<a href = "{{ .RelPermalink }}">Abschnitt öffnen</a>
Sind die sections alle aufgelistet, startet eine zweite Schleife, um die Liste durch alle Unterseiten des Typs page zu ergänzen. Dieses Konstrukt ist technisch identisch zur vorgenannten Schleife für die sections. Die Beschreibung wird daher kurzgefasst.
{{ range .Pages }}
{{ if eq .Layout "file" }}
<hr>
<h4>
<a href = "{{ .RelPermalink }}"><i class="fas fa-download"></i></a>
-
<a href = "{{ .RelPermalink }}" style = "color: Black;"> {{ .Title }} </a>
</h4>
<p>{{ .Summary | markdownify | safeHTML | truncate $maxChars }}</p>
<a href = "{{ .RelPermalink }}">Zum Download</a>
{{ else if eq .Layout "wiki" }}
<hr>
<h4>
<a href = "{{ .RelPermalink }}"><i class="fas fa-book-reader"></i></a>
-
<a href = "{{ .RelPermalink }}" style = "color: Black;"> {{ .Title }} </a>
</h4>
<p>{{ .Summary | markdownify | safeHTML | truncate $maxChars }}</p>
<a href = "{{ .RelPermalink }}">Weiterlesen</a>
{{ else }}
{{ errorf "Oh oh, hier fehlt die Ansichtsdefinition für das Layout '%s' in Seite %q" .Layout .Path }}
{{ end }}
{{ end }}
Die Unterschiede:
range
läuft hier nicht auf .Sections
, sondern auf .Pages
..Layout
-Typ aus dem Frontmatter unterschieden.
Ersatzweise ginge auch .Params.layout
.layout: "file"
oder layout: "wiki"
vorhanden ist, wird
das Icon für den Eintrag ausgewählt.errorf
.Das Script findet dann seinen Abschluss durch die nötigen abschliessenden Tags / Befehle.
<hr>
<br />
</div>
</div>
{{ end }}