# Marketing/tracking scripts, gated per-site via sflg.marketing.* Site Settings (empty = disabled),
# grouped as one COA per slot so the set stays a single movable unit. Notes: Cookiebot here is inert
# until sys_template uid 1's hardcoded classic-template copy is removed (else duplicate banner/dataLayer);
# GTM/Meta Pixel use type="text/plain" data-cookieconsent="marketing" so either Cookiebot instance can
# block them pre-consent; noscript fallbacks can't be consent-gated (no JS there, accepted gap); each
# child's stdWrap.replacement property is singular ("replacement", not "replacements" — TYPO3 silently
# ignores the plural and leaves the token unsubstituted).
page {
headerData {
100 = COA
100 {
5 = TEXT
5 {
stdWrap.replacement {
10 {
search = ###COOKIEBOT_ID###
replace = {$sflg.marketing.cookiebotId}
}
}
value (
)
if.isTrue = {$sflg.marketing.cookiebotId}
}
10 = TEXT
10 {
stdWrap.replacement {
10 {
search = ###GTM_CONTAINER_ID###
replace = {$sflg.marketing.gtmContainerId}
}
}
value (
)
if.isTrue = {$sflg.marketing.gtmContainerId}
}
20 = TEXT
20 {
stdWrap.replacement {
10 {
search = ###FB_PIXEL_ID###
replace = {$sflg.marketing.fbPixelId}
}
}
value (
)
if.isTrue = {$sflg.marketing.fbPixelId}
}
}
}
footerData {
100 = COA
100 {
10 = TEXT
10 {
stdWrap.replacement {
10 {
search = ###GTM_CONTAINER_ID###
replace = {$sflg.marketing.gtmContainerId}
}
}
value (
)
if.isTrue = {$sflg.marketing.gtmContainerId}
}
}
}
}