如何将复杂TypoScript条件迁移适配到TYPO3 10 LTS/11 LTS
TYPO3 10/11 LTS TypoScript条件迁移正确写法
错误原因
原有写法的核心问题:
- TYPO3 10+ 基于Symfony Expression Language的TypoScript条件要求所有逻辑都写在同一对
[]括号内,不能拆分多个[]后用&&/||拼接 - 未显式添加逻辑分组括号,运算符优先级容易导致判断结果不符合预期
- 原旧语法
GP:对应GET+POST参数,request.getQueryParams()仅能获取GET参数,和原逻辑不一致
正确实现代码
仅匹配GET参数(和你现有尝试逻辑对齐)
[ (traverse(request.getQueryParams(), 'tx_news_pi1/news', 0) > 0 || traverse(request.getQueryParams(), 'tx_news_pi1/news_preview', 0) > 0) && (123 in tree.rootLineIds || 456 in tree.rootLineIds) ] # 此处写条件匹配后需要执行的TypoScript逻辑 [END]
完全兼容旧GP:逻辑(同时匹配GET+POST参数)
如果需要和旧版globalVar = GP:的行为完全一致,同时覆盖GET和POST传参,使用如下写法:
[ ( traverse(request.getQueryParams(), 'tx_news_pi1/news', 0) > 0 || traverse(request.getParsedBody(), 'tx_news_pi1/news', 0) > 0 || traverse(request.getQueryParams(), 'tx_news_pi1/news_preview', 0) > 0 || traverse(request.getParsedBody(), 'tx_news_pi1/news_preview', 0) > 0 ) && (123 in tree.rootLineIds || 456 in tree.rootLineIds) ] # 此处写条件匹配后需要执行的TypoScript逻辑 [END]
补充说明
traverse函数第三个参数为默认值,参数不存在时直接返回该值,避免null值比较带来的异常- 显式的括号分组可以保证逻辑优先级为「(参数满足A或B) 且 (页面在指定根线内)」,和旧版条件预期一致
内容的提问来源于stack exchange,提问作者Dennis
相关产品推荐
相关产品推荐

