Pure Blog: Überschriften verlinken
Vorgestern fand ich heraus, dass der Markdown-Parser Parsedown in Pure Blog mit der Syntax ### 20.04.2026 {#2026-04-20} das Erstellen von HTML-IDs für Überschriften unterstützt. Dadurch kann man direkt auf letztere verlinken.
Allerdings war ich es leid, bei den Überschriften in meinem Änderungsprotokoll das Datum immer zwei Mal (s. o.) hinschreiben zu müssen.
Daher bastelte ich mir heute für die Datei config/hooks.php (siehe auch Using Hooks) die Funktion auto_header_ids(), welche für Überschriften, bei denen ich selbst keine ID vorgebe, eine solche automatisch aus dem Text der Überschrift bildet. Aus der Markdown-Überschrift ### 20.04.2026 wird so z. B. die HTML-ID 20042026. Die Überschrift lässt sich dann mit [20.04.2026](/changelog#20042026) verlinken.
Die Hauptarbeit macht die Funktion slugify() aus der Pure-Blog-Datei functions.php. Den Aufruf von html_entity_decode() brauchen wir, damit in einer Überschrift aus z. B. & über & nicht amp für die ID wird. Siehe Demo#Links & Buttons. Den regulären Ausdruck habe ich absichtlich simpel gehalten, da Parsedown immer gültiges HTML erzeugen sollte. Und falls ihr selbst mal HTML-Code in eure Beiträge einstreut, dann verwendet halt die korrekte Syntax. 😉
function on_render_markdown(string $html): string
{
$html = auto_header_ids($html);
return $html;
}
function auto_header_ids(string $html): string
{
return preg_replace_callback(
'|<h(\d)>(.+)</h\d>|',
function (array $m): string {
$id = slugify(html_entity_decode($m[2], ENT_QUOTES | ENT_HTML5, 'UTF-8'));
return "<h$m[1] id=\"$id\">$m[2]</h$m[1]>";
},
$html
);
}