Zum Inhalt springen

Warum gibt es eine Prüfung auf versteckte Header?

Standardmäßig rendert diese Extension das menschenlesbare Fragment als id-Attribut an der Überschrift der Inhaltselemente. Daher wird ein Fragment in Verlinkungen nicht angewendet, falls der Header eines Inhaltselements verborgen ist – es würde das Ziel fehlen. Stattdessen fällt TYPO3 auf den eigenen Default zurück: die UID des Inhaltselements (#c123), die in dessen Fluid-Layout gesetzt ist.

Dieser Mechanismus greift sowohl in “Section Index”-Menüs als auch bei Links im RTE.

Neue Einstellung in TypoScript und Site Settings

Die Einstellung settings.checkForHiddenHeaders ermöglicht es ab sofort, die Prüfung bei Bedarf zu deaktivieren. In dem Fall ist der Integrator dafür verantwortlich, die Fluid-Templates anzupassen: Die Variable {fragmentIdentifier} muss als id-Attribut an einem HTML-Element gesetzt werden, das immer gerendert wird.

Eine einfache Möglichkeit ist die Ergänzung im Fluid-Layout der Inhaltselemente:

<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" data-namespace-typo3-fluid="true">
    <f:if condition="{data.frame_class} != none">
        <f:then>
            <div id="c{data.uid}" class="frame frame-{data.frame_class} frame-type-{data.CType} frame-layout-{data.layout}{f:if(condition: data.space_before_class, then: ' frame-space-before-{data.space_before_class}')}{f:if(condition: data.space_after_class, then: ' frame-space-after-{data.space_after_class}')}">
                <f:if condition="{data._LOCALIZED_UID}">
                    <a id="c{data._LOCALIZED_UID}"></a>
                </f:if>
                <f:if condition="{fragmentIdentifier}">
                    <div id="{fragmentIdentifier}"></div>
                </f:if>
                <f:render section="Before" optional="true">
                    <f:render partial="DropIn/Before/All" arguments="{_all}" />
                </f:render>
                <f:render section="Header" optional="true">
                    <f:render partial="Header/All" arguments="{_all}" />
                </f:render>
                <f:render section="Main" optional="true" />
                <f:render section="Footer" optional="true">
                    <f:render partial="Footer/All" arguments="{_all}" />
                </f:render>
                <f:render section="After" optional="true">
                    <f:render partial="DropIn/After/All" arguments="{_all}" />
                </f:render>
            </div>
        </f:then>
        <f:else>
            <a id="c{data.uid}"></a>
            <f:if condition="{data._LOCALIZED_UID}">
                <a id="c{data._LOCALIZED_UID}"></a>
            </f:if>
            <f:if condition="{fragmentIdentifier}">
                <div id="{fragmentIdentifier}"></div>
            </f:if>
            <f:if condition="{data.space_before_class}">
                <div class="frame-space-before-{data.space_before_class}"></div>
            </f:if>
            <f:render section="Before" optional="true">
                <f:render partial="DropIn/Before/All" arguments="{_all}" />
            </f:render>
            <f:render section="Header" optional="true">
                <f:render partial="Header/All" arguments="{_all}" />
            </f:render>
            <f:render section="Main" optional="true" />
            <f:render section="Footer" optional="true">
                <f:render partial="Footer/All" arguments="{_all}" />
            </f:render>
            <f:render section="After" optional="true">
                <f:render partial="DropIn/After/All" arguments="{_all}" />
            </f:render>
            <f:if condition="{data.space_after_class}">
                <div class="frame-space-after-{data.space_after_class}"></div>
            </f:if>
        </f:else>
    </f:if>
</html>

In den Header-Partials darf der {fragmentIdentifier} dann natürlich nicht gerendert werden. Das nachfolgende TypoScript entfernt den Pfad zu den Partials, die diese Extension mitliefert:

lib.contentElement.partialRootPaths.101 >

Außerdem sollte die Checkbox “Link zu #Sprungmarke setzen” per Page TSconfig ausgeblendet werden, wenn man diesen Link nicht ebenfalls an anderer Stelle im HTML rendert.

Zur News-Übersicht