Yellows HTML-Ausgabe erweitern

Mit Yellow lassen sich sehr einfach beliebige Einträge in die generierten HTML-Dateien schreiben. Das geht mit ein paar kleinen Änderungen der Standardvorlagen.

Yellows Disskussionteil bei GitHub enthält diverse coole Tipps. Leider versinken die dort. Beim Drüberlesen ist keineswegs sofort zwingend klar, wofür das gerade gelesene woanders mal gut sein könnte. Diese Perlen will ich hier aufbereiten. Voraussetzung ist natürlich, dass ich sie selbst finde oder darauf hingewiesen werde1.

Wenn die Dinge ineinander greifen, läuft's… Yellow generiert von sich aus unter anderem der Name des Autors als Meta-Eintrag:

<meta name="author" content="Norbert Simon"/> 

Dafür greift Yellow auf den Eintrag im Markdown-Header zurück oder – falls dort keiner eingetragen wurde – der Eintrag in der Konfigurationsdatei des Systems.

Wer Schlüsselworte ergänzen möchte wird allerdings feststellen, dass allein durch Hinzufügen von keywords in den Markdown-Header keine Änderung erfolgt. Zumindest ist das in Version 0.8.5 so, aus der in der Basis-Installation der Meta-Eintrag „keywords“ entfernt wurde. Es lässt sich trefflich darüber streiten, ob das mittlerweile überflüssig oder doch noch hilfreich ist. Schlüsselworte mögen an Bedeutung verloren haben. Sie werden jedoch sicher noch von Google & Co. indiziert und können nützlich sein, wenn damit Querverweise hergestellt werden, die im Text selbst fehlen.

Daher habe ich mich gefragt, wie ich Schlüsselworte fallweise eintragen kann. Hier hilft ein Tipp aus dem Entwicklerbereich von Yellow. Im zitierten Thread geht es um Einträge im Header, die mittlerweile zur Meta-Extension geführt haben. Das dort Geschriebene lässt sich verallgemeinert für beliebige HTML-Einträge formulieren:

Individuelle Änderungen der Ausgabe lassen sich einfach mit Ergänzungen in den verwendeten Layout-Dateien realisieren.

Dafür müssen die verwendeten Layout-Dateien mit dem gewünschten Eintrag ergänzt werden. Für die hier beispielhafte Ergänzung des keywords-Meta-Eintrages wird es in den meisten Fällen nur eine header.htmlgeben, was den Aufwand für Ergänzungen im Kopfbereich der HTML-Dateien sehr übersichtlich macht.

Das nachfolgende Beispiel lässt sich beliebig für andere Einträge nutzen. Ich mache hier jedoch bewusst keine Angaben, wie das erfolgen kann. Wer daran scheitert, sich das aus dem nachfolgenden Beispiel und den vorhandenen Dateien im Verzeichnis „Layouts“ zu erschließen, sollte vorher an seinen PHP- und/oder HTML-Kenntnissen arbeiten.

Die Anforderung formulieren

Ich möchte optional auf meinen Seiten Schlüsselworte eintragen. Wenn die Seite den Eintrag tag enthält, was meistens bei Wikis oder Blogs der Fall sein dürfte, sollen diese ebenfalls als Schlüsselwort angesehen werden. Daraus ergeben sich drei Bedingungen:

  • Gibt es im Kopf der Seite den Eintrag kewords?
  • Gibt es im Kopf der Seite den Eintrag tag?
  • Kombiniere die gefundenen Einträge zu einem META-Eintrag, wobei keywords höherwertiger ist als tag

Aus

title: Seite mit Schlüsselworten
[...]
tag: Gedanken, Yellow
keywords: header anpassen,layout anpassen,individualisieren
[...]
---

soll am Ende

<title>Seite mit Schlüsselworten</title>
[...]
<meta name="keywords" content="header anpassen,layout anpassen,individualisieren,Gedanken, Yellow" />
[...]

werden.

Der Eintrag soll natürlich sinnvoll und syntaktisch richtig sein. Also weder ein leerer Meta-Eintrag, noch ein unnötiges Trennzeichen, wenn es nur einen der beiden Einträge gibt. Das wäre zwar in der Darstellung des Browsers egal. Weil jedoch die Suchmaschinenen gelegentlich auf fehlerhaften HTML-Code mit Hustenreiz reagieren, ist ordentliches HTML unbedingt erstrebenswert.

Das nachfolgende Beispiel ist aus dem, was sowieso in der header.html-Datei drin steht, abgeleitet und mit ein bisschen PHP drumherum mit den Prüfungen versehen, damit zuerst keywords, dann ggf. ein Komma und anschließend die Tag-Einträge als meta name "keywords" … in der HTML-Datei stehen – wenn es wenigstens einen davon gibt:

<?php
 if ($this->yellow->page->get("keywords") or $this->yellow->page->gethtml("tag")) {
    echo '<meta name="keywords" content="' . $this->yellow->page->gethtml("keywords");  
    if ($this->yellow->page->get("keywords") and $this->yellow->page->get("tag")) echo ",";
    echo $this->yellow->page->get("tag") . "\" />\n";
}
?>

Update: In der ersten Version dieses Beitrags wurde die Funktion „get“ verwendet. Die Funktion „gethtml“ ist für den gezeigten Zweck besser geeignet.

Das wird an geeigneter Stelle in die header.html-Datei eingefügt. Bei mir steht es – wenn es überhaupt in der Datei steht – unter meta name "autor".

Natürlich geht es auch flacher. Das Anfügen der Tag-Einträge ist womöglich unnötig, weil sie (typischerweise) sichtbar im Textteil stehen. Sie bekommen damit (eventuell…) etwas mehr Bedeutung, sind jedoch gegebenenfalls den Schlüsselworten nachgeordnet. Zumindest war es „früher“ so, dass diese in der Reihenfolge ihrer Relevanz von den Suchmaschinen berücksichtigt wurden.

„Update-fest“ anpassen

Die Aktualisierungsfunktion von Yellow schaut auch nach Layout-Dateien, die aktualisierbar sind. Dabei verhält sich der Updater normalerweise defensiv, wenn einzelne Layout-Dateien verändert wurden. Alle – außer den geänderten – werden aktualisiert. Speziell bei Layouts ist das sehr wahrscheinlich unkritisch. Wer dennoch „alles aktuell“ haben will, kann die „Aktualisierung erzwingen“. Das überschreibt dann die eigenen Änderungen. Deshalb sollte es davon ein Backup geben, aus dem die dann noch gewünschten Anpassungen übernommen werden können.

Wenn's mal schief geht …

… könnte das daran liegen, dass sich im Kern von Yellow etwas geändert hat. Das war beispielsweise beim Umstieg auf Version 0.8.4 der Fall. Da flogen mir reihenweise Fehlermeldungen bei meinen Anpassungen um die Ohren. Die API war erweitert und vereinfacht worden, womit meinte angepassten PHP-Befehle unbrauchbar wurden.

Wenn in den Fehlermeldungen Worte wie „undefined“ oder „unknown“ vorkommen, sind das Indikatoren darauf. Dann hilft kiebitzen in den aktuellen Standard-Dateien, die verraten, was am eigenen Code verändert werden muss, damit wieder alles läuft.

Das Bild stammt von Pixabay.


  1. Wer etwas entdeckt und mir schicken möchte, kann die Kommentarfunktion nutzen (s.u.). „Mach mal“ ist jedoch zu wenig. Ich möchte schon ein paar Argumente bekommen, weshalb das einen Beitrag – und damit meine Zeit dafür – wert ist. ↩︎