TypoScript Setup Reference

Configure prefix and suffix

plugin.tx_contentslug

Property Data type Default
urlFragmentPrefix data-type-cobject TEXT cObject with current UID
urlFragmentSuffix data-type-cobject TEXT cObject with current UID
replaceFragmentInPageLinks boolean 1

urlFragmentPrefix

Property
urlFragmentPrefix
Data type
data-type-cobject
Description

This cObject can be used to render a prefix for the human-readable URL fragment.

Prefix, suffix, and fragment are assembled in the custom variable fragmentIdentifier of lib.contentElement.

Default:

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

Result:

c<uid>-<human-readable-fragment>
c123-section-of-interest
Copied!

urlFragmentSuffix

Property
urlFragmentSuffix
Data type
data-type-cobject
Description

This cObject can be used to render a suffix for the human-readable URL fragment.

Prefix, suffix, and fragment are assembled in the custom variable fragmentIdentifier of lib.contentElement.

Default:

plugin.tx_contentslug.urlFragmentSuffix = TEXT
plugin.tx_contentslug.urlFragmentSuffix {
    field = uid
    stdWrap.noTrimWrap = |-||
    if.isTrue = {$plugin.tx_contentslug.settings.renderSuffix}
}
Copied!

Result (if activated):

<human-readable-fragment>-<uid>
section-of-interest-123
Copied!

Assemble the fragmentIdentifier variable

This variable is available in all Fluid templates of EXT:fluid_styled_content and allows to configure the complete URL fragment at a central place.

lib.contentElement {
    // Override default templates of fluid_styled_content:
    partialRootPaths.101 = EXT:content_slug/Resources/Private/Overrides/fluid_styled_content/Partials/
    templateRootPaths.101 = EXT:content_slug/Resources/Private/Overrides/fluid_styled_content/Templates/

    // Build a complete fragment identifier with possible prefix and suffix:
    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
        }
    }
}
Copied!

Use FragmentIdentifierProcessor for "Section Index" menus

The menu content elements of type "Section Index" are built with DataProcessors.

To get the configured fragmentIdentifier variable for each of the linked content elements in these menus, the custom FragmentIdentifierProcessor is needed.

// Process 'fragmentIdentifier' variable in section menus:
tt_content.menu_section.dataProcessing.10.dataProcessing.20.dataProcessing.5 = Sebkln\ContentSlug\DataProcessing\FragmentIdentifierProcessor
tt_content.menu_section_pages.dataProcessing.10.dataProcessing.20.dataProcessing.5 = Sebkln\ContentSlug\DataProcessing\FragmentIdentifierProcessor
Copied!

Sanitize custom data with postUserFunc

In case you append or prepend some custom strings, you can use the fragment evaluation to sanitize the completed URL fragment again:

urlFragmentSuffix = TEXT
urlFragmentSuffix {
    field = subheader
    if.isTrue.field = subheader
    stdWrap.noTrimWrap = |-||
}

lib.contentElement.variables.fragmentIdentifier {
    stdWrap.postUserFunc = Sebkln\ContentSlug\Evaluation\FragmentEvaluation->sanitizeFragment
}
Copied!