Zum Inhalt springen

Heute habe ich eine neue Hauptversion der Extension content_slug veröffentlicht. Sie erlaubt die Anwendung der menschenlesbaren Fragmente außerhalb der "Section Index"-Menüs und erleichtert die Konfiguration und das Templating.

TypoScript-Konfiguration des URL-Fragments

Die Sprungmarke enthält per Default einen UID-Präfix (#c123-interessanter-absatz), um etwaige Probleme mit id-Attributen im Website-Template zu vermeiden. Dieser Präfix – oder ein evtl. gewünschter Suffix – musste bislang an mehreren Stellen in den Fluid-Templates gepflegt werden.

Schon bei der Erstellung der Extension hatte ich daher geplant, die komplette Sprungmarke mit TypoScript zentral konfigurierbar zu machen.

Ab Version 2 ergänzt diese Extension eine neue Variable {fragmentIdentifier} in den Fluid-Templates der Inhaltselemente:

lib.contentElement.variables {
    fragmentIdentifier = COA
    fragmentIdentifier {
        if.isTrue.field = tx_content_slug_fragment

        10 =< plugin.tx_contentslug.urlFragmentPrefix

        20 = TEXT
        20.field = tx_content_slug_fragment

        30 =< plugin.tx_contentslug.urlFragmentSuffix

        stdWrap.trim = 1
    }
}

In den Fluid-Templates muss daher nur noch diese Variable verwendet werden, was das Templating vereinfacht und Tippfehler vermeidet.

Präfix und Suffix werden separat vorkonfiguriert und lassen sich mit TypoScript-Konstanten (de)aktivieren.

plugin.tx_contentslug {
    urlFragmentPrefix = TEXT
    urlFragmentPrefix {
        field = uid
        stdWrap.noTrimWrap = |c|-|
        if.isTrue = {$plugin.tx_contentslug.settings.renderPrefix}
    }
}

TYPO3-Integratoren können den Präfix unter plugin.tx_contentslug individuell anpassen – oder das gesamte URL-Fragment direkt im COA der Fluid-Variable konfigurieren.

Für die "Section Index"-Menüs habe ich einen DataProcessor geschrieben, der die URL-Fragmente für die einzelnen Verlinkungen verarbeitet.

Die Extension-Dokumentation enthält eine Übersicht der gesamten Konfiguration.

Breaking Changes in Fluid-Templates

In den beiden Header-Partials dieser Extension wurde bereits zuvor eine Variable fragmentIdentifier verwendet, die den unverarbeiteten Wert aus data.tx_content_slug_fragment enthielt.

Mit der Einführung der TypoScript-Konfiguration müssen die bislang manuell gesetzten Ergänzungen im Fragment entfernt werden, wie etwa der c{uid}- Präfix im folgenden Beispiel.

Vorher:

<h1 id="{f:if(condition: fragmentIdentifier, then: 'c{uid}-{fragmentIdentifier}')}" class="{positionClass}">
    <f:link.typolink parameter="{link}">{header}</f:link.typolink>
    <f:if condition="{fragmentIdentifier} && {renderAnchorLink}"><a class="headline-anchor" href="#c{uid}-{fragmentIdentifier}">#</a></f:if>
</h1>

Nachher:

<h1 id="{fragmentIdentifier}" class="{positionClass}">
    <f:link.typolink parameter="{link}">{header}</f:link.typolink>
    <f:if condition="{fragmentIdentifier} && {renderAnchorLink}"><a class="headline-anchor" href="#{fragmentIdentifier}">#</a></f:if>
</h1>

In den beiden "Section Index"-Templates sollte es zu keinen unmittelbaren Breaking Changes kommen, da dort direkt das Feld tx_content_slug_fragment ausgelesen wird. Trotzdem ist es angebracht, auch hier zukünftig die neue Variable fragmentIdentifier zu verwenden.

Bislang beschränkten sich die lesbaren Fragmente auf die Menüs vom Typ "Section Index". Mehrere Anwender hatten angefragt, ob eine Verwendung auch für Links im Richtext-Editor möglich wäre.

Das größte Problem war dabei bislang der mögliche individuelle Präfix oder Suffix, der in Version 1.x direkt in den Templates gepflegt wurde. Dank der neuen TypoScript-Konfiguration lässt sich das komplette URL-Fragment mit cObjGetSingle() in einem Hook verarbeiten.

Beim Rendering der Seite prüft dieser Hook die internen Links auf vorhandene Fragmente und überschreibt diese mit dem lesbaren Fragment, sofern eines vom Redakteur gepflegt wurde.

In der Datenbank bleiben alle Links unverändert (t3://page?uid=77#123). Dadurch bleiben Links valide, falls das menschenlesbare Fragment eines Inhaltselements nachträglich angepasst oder diese Extension deinstalliert wird.

Neben dem Richtext-Editor werden auch Links berücksichtigt, die in Backend-Feldern vom Typ inputLink gesetzt wurden (wie etwa das Feld für den Header-Link).

Auf Wunsch lässt sich der Hook über TypoScript deaktivieren.

Zur News-Übersicht