Templating¶
This extension enhances the existing TYPO3 content elements, which are commonly rendered with EXT:fluid_styled_content. Therefore, customized Fluid templates have to be provided by this extension.
TypoScript setup¶
The extension currently only sets new template paths for EXT:fluid_styled_content.
lib.contentElement {
partialRootPaths.101 = EXT:content_slug/Resources/Private/Overrides/fluid_styled_content/Partials/
templateRootPaths.101 = EXT:content_slug/Resources/Private/Overrides/fluid_styled_content/Templates/
}
Fluid templates¶
The customized Fluid templates contain some new variables and viewhelpers to render the contents of the new fields.
Resources/Private/Overrides/fluid_styled_content/Partials/Header/All.html¶
We need to transfer additional variables to Header.html:
1 2 3 4 5 6 7 8 9 | <f:render partial="Header/Header" arguments="{
header: data.header,
layout: data.header_layout,
positionClass: '{f:if(condition: data.header_position, then: \'ce-headline-{data.header_position}\')}',
link: data.header_link,
uid: data.uid,
fragmentIdentifier: data.tx_content_slug_fragment,
renderAnchorLink: data.tx_content_slug_link,
default: settings.defaultHeaderType}" />
|
Resources/Private/Overrides/fluid_styled_content/Partials/Header/Header.html¶
Each heading (<h1>
to <h5>
) gets a new id
attribute. It will contain
the uid and fragment identifier, if a fragment was set in the
content element.
If a fragment exists and the checkbox “Set link to #anchor” is activated, an additional link will be rendered right to the header.
You can style this anchor through the class name and/or change the displayed symbol in the template.
1 2 3 4 | <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>
|
Important
Note the spelling: with #
in the anchor link, without #
in
the id
attribute!
Also important: if header_layout
is set to default, the Header.html
partial is called a second time. Therefore, we need to transfer our additional
variables again:
1 2 3 4 5 6 7 8 9 10 11 12 | <f:defaultCase>
<f:if condition="{default}">
<f:render partial="Header/Header" arguments="{
header: header,
layout: default,
positionClass: positionClass,
uid: uid,
fragmentIdentifier: fragmentIdentifier,
renderAnchorLink: renderAnchorLink,
link: link}"/>
</f:if>
</f:defaultCase>
|