| name | typo3-typoscript-conditions |
| description | Add or fix frontend TypoScript conditions for TYPO3 v14. Use when you need conditional TypoScript for specific page IDs, rootlines, site identifiers, languages, requests, TYPO3 versions, or logged-in frontend/backend users and groups in `setup.typoscript`, imported TypoScript files, or site package TypoScript constants that use site settings. |
TYPO3 TypoScript Conditions
Use this skill for TYPO3 v14 frontend TypoScript conditions only. Prefer official condition variables and functions from the TYPO3 docs, and avoid legacy patterns.
Workflow
- Identify the exact scope:
setup.typoscript or imported setup for normal frontend TypoScript conditions
constants.typoscript only when using site settings based conditions
- Choose the narrowest supported criterion:
- current page:
traverse(page, "uid")
- current language:
siteLanguage("languageId") or locale()
- current frontend user or group:
frontend.user.*
- current site or request context:
site(), request(), session()
- Write the condition with TYPO3 syntax:
[condition]
# conditional TypoScript
[END]
- Combine criteria with
&&, ||, and ! when needed.
- Guard nullable objects:
- Prefer
request && ... before calling request methods.
- Prefer
traverse() for arrays to avoid warnings on missing keys.
- Use the null-safe operator
?. where appropriate.
Ready-Made Patterns
Specific Page ID
[traverse(page, "uid") == 42]
page.10.value = Only on page 42
[END]
Multiple Pages Or Page Range
[traverse(page, "uid") in [17, 24, 42]]
page.10.value = Only on selected pages
[END]
[traverse(page, "uid") in 100..199]
page.20.value = Only in this page UID range
[END]
Specific Language
[siteLanguage("languageId") == 1]
page.10.value = Only in language ID 1
[END]
TYPO3 v14 provides direct locale access:
[locale().getName() == "de-DE"]
page.20.value = Only in German
[END]
Logged-In Frontend User Group
[frontend.user.isLoggedIn && 4 in frontend.user.userGroupIds]
page.10.value = Only for FE group 4
[END]
Use frontend.user.userGroupList only when string matching is really required:
[like(","~frontend.user.userGroupList~",", "*,4,*")]
page.20.value = FE group list contains 4
[END]
Combine Page, Language, And FE Group
[traverse(page, "uid") == 42 && siteLanguage("languageId") == 1 && frontend.user.isLoggedIn && 4 in frontend.user.userGroupIds]
page.10.value = Only on page 42, in language 1, for FE group 4
[END]
Version Guardrails For TYPO3 14
- Do not use legacy
loginUser() or usergroup() conditions. Use frontend.user.* or backend.user.* instead.
- Do not use
getTSFE() for new work. It was removed in TYPO3 v14. For page checks, prefer traverse(page, "uid") or request?.getPageArguments()?.getPageId().
- Use
locale() for locale object checks and siteLanguage() when reading site language configuration values.
Selection Guide
- Page-specific condition:
use
page or tree.*
- Language-specific condition:
use
siteLanguage() and locale()
- FE login or FE group condition:
use
frontend.user.isLoggedIn, frontend.user.userId, frontend.user.userGroupIds
- Site-specific condition:
use
site()
- Query parameter, page type, cookie, host, or header condition:
use
request() and its methods
- TYPO3 version or branch condition:
use
compatVersion(), typo3.version, or typo3.branch
References
Read references/criteria-catalog.md when you need the full list of TYPO3 v14 condition criteria, examples, and migration-safe replacements.
Official docs: