Pure Blog: Überschriften direkt 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 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.
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([1-6])>(.*?)</h\1>|i',
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
);
}