Plugin Table of Content


Automatische Inhaltsverzeichnisse sind in elektronischen Dokumentationen zum Standard geworden, in diesem Code ein einfacher Ansatz.

Das TOC Plugin für FlightCMS

Um ein automatisches Inhaltsverzeichnis im Beitrag zu erzeugen, gibt es verschiedene Möglichkeiten. Der nachfolgende Code ist eine sehr einfache Variante für das FlightCMS.

echo '<ul class="toc">';
foreach(explode("\n",$content) as $value)
{
    if (preg_match('(<h[1-6].id=)', $value) && preg_match('(</h[1-6]>)', $value))
    {
        $link    = explode('"',explode('id="', $value)[1])[0];
        $title   = str_replace(array('-','_'),' ',$link);
        $kapitel = strip_tags($value);
        echo '<li class="fs-6">';
        echo '<a href="#'.$link.'" title="'.$title.'">'.$kapitel.'</a>';
        echo '</li>';
    } else {
        if (preg_match('(<h[1-6])', $value) && preg_match('(</h[1-6]>)', $value))
        {
            echo '<li class="fs-6">';
            echo strip_tags($value);
            echo '</li>';
        }
    }
}
echo '</ul>';

Code

Code-Beschreibung

Zunächt offensichtlich, das gesamte Codesegment ist mit einem Listen Tag <ul>...</ul> umrahmt, damit eine geschlossene Liste erzeugt werden kann. Im Inneren werden dann Schritt für Schritt die Listenelemente <li>...</li> aus dem Beitragsinhalt $content extrahiert.

Der zentrale RegEx beginnt mit dem Start-Pattern (<h[1-6].id=) und bedingt das Ende-Pattern (</h[1-6]>), dadurch soll sichergestellt werden, das sich in einer aktuellen Zeile der foreach() ein öffnendes und schließendes Überschriften Tag befindet. Das Tag darf die Ziffern von 1 bis 6 enthalten, während das öffnende Tag noch auf den Passus id= untersucht wird.

Dafür ist Bedingung, das der Beitragsautor oder der Redakteur eine Überschrift in der Form ## Überschrift ## {#Name-der-ID} verfasst. In diesem Fall wird das Inhaltsverzeichnis mit klickbaren Links erzeugt.

Der Linkname bzw. ID-Name muss HTML-Konform ohne Leerzeichen und Sonderzeichen abgefasst werden. Ideal sind Bindestriche oder Unterstriche, die durch das Plugin für die Anzeige problemlos in Leerzeichen umgewandelt werden können.

Ist dies nicht der Fall, wird die verschachtelte if-Klausel aktiv und prüft ebenfalls auf das eingangs beschriebene Pattern, lässt jedoch die Maskierung auf id= weg, da keine ID vom Redakteur vorgesehen ist. Es wird ein Inhaltsverzeichnis ohne Links angezeigt.

Damit auch noch ein alternatives title=-Attribut erzeugt wird, extrahiert str_replace() den Link-Text des Autors und wandelt Bindestriche und Unterstriche in Leerzeichen um.


Mein Name ist Oliver Lohse. Ich bin diplomierter Wirtschafts-Informatiker und Organisations-Programmierer in verschiedenen Sprachen bzw. Markup-Dialekten, z.B. Java, JEE, COBOL, PHP, Python, MySQL, HTML, CSS, ANSI C, Lisp, Rexx, JavaScript, Scheme, ActionScript 2.0, Maschinensprache, Assembler und JCL. Seit mehr als 25 Jahren arbeite ich in einem großen Softwareunternehmen für Versicherungen in Hannover Niedersachsen.

FlightCMS
2023-12-21
Logbuch,Log,Status
post
Kontakt@Oliver-Lohse.de

FlightCMS

FlightCMS basiert auf dem Flight Microframework, einem YAML-Parser, dem Markdownparser ParsedownExtra und Parsedown. FlightCMS nutzt MVC-Patterns.

Datenschutz

Die Webseite verwendet keinerlei Tracking- oder Speichermechanismen, die einen Rückschluss auf das Leserverhalten und Ihre Identität zulassen. Die Webseite verwendet keine Cookies, denn Cookies haben einen schlechten Ruf.

Impressum

CMSWorkbench ist eine Entwicklerseite über meine Arbeit im Bereich der Content Management Systeme. Die vielen Codeschnipsel sind im wesentlichen als kleine Notizzettel zu werten als das es ausgereifte Beiträge wären.