Typo3 7.6迁移至12.4.7:TypoScript兼容问题及调试求助
TYPO3 7.6.x 迁移到12.4.7:FLUIDTEMPLATE菜单变量不填充及语言条件错误排查指南
一、先修复语言条件解析错误
TYPO3 9.x起废弃了[globalVar]旧语法,必须改用新条件表达式。原代码[globalVar = GP:L = 1]替换为以下两种写法之一:
// 基于GET参数判断(兼容旧逻辑) [request.getQueryParams()['L'] == 1] // 这里放原语言相关配置 [end]
或更可靠的站点语言UID判断(TYPO3 10+推荐):
[siteLanguage("uid") == 1] // 这里放原语言相关配置 [end]
旧语法会导致配置不生效,可能间接影响菜单变量传递,必须优先修复。
二、FLUIDTEMPLATE菜单变量不填充的排查步骤
1. 确认菜单对象已传递到FLUIDTEMPLATE
检查setup.typoscript中FLUIDTEMPLATE的variables配置,确保正确引用了menu.typoscript里的菜单对象:
page.1 = FLUIDTEMPLATE page.1 { templateRootPaths { 0 = EXT:你的扩展/Resources/Private/Templates/ } variables { mainMenu = < lib.mainMenu // 确保这里指向菜单对象 } }
同时验证模板、布局、部分文件的路径配置正确,文件实际存在。
2. 检查菜单TypoScript的兼容性
TYPO3 12.x兼容旧TMENU语法,但推荐用MenuProcessor适配FLUID:
- 旧TMENU写法示例(需确保无语法错误):
lib.mainMenu = TMENU lib.mainMenu { wrap = <ul>|</ul> NO = 1 NO { wrapItemAndSub = <li>|</li> stdWrap.field = title stdWrap.typolink.parameter.field = uid } }
- 新MenuProcessor写法(更适合FLUID变量传递):
lib.mainMenu = MenuProcessor lib.mainMenu { levels = 1 includeSpacer = 0 as = mainMenu expandAll = 1 entryLevel = 0 }
3. 验证FLUID模板是否正确调用变量
根据菜单生成方式,模板中对应处理:
- 若用MenuProcessor:遍历数组渲染
<ul> <f:for each="{mainMenu}" as="menuItem"> <li><a href="{menuItem.link}">{menuItem.title}</a></li> </f:for> </ul>
- 若用旧TMENU:直接输出HTML字符串
{mainMenu -> f:format.raw()}
4. 用内置工具调试
- TypoScript对象浏览器:后台「模板」模块→「TypoScript对象浏览器」,搜索
lib.mainMenu和page.1.variables.mainMenu,查看是否有数据输出。 - FLUID调试:模板中添加
<f:debug>{mainMenu}</f:debug>,需开启FE调试($GLOBALS['TYPO3_CONF_VARS']['FE']['debug'] = true;),查看变量是否存在、结构是否正确。 - 系统日志:后台「系统>日志」,排查TypoScript解析或FLUID模板报错。
三、迁移通用注意事项
- TYPO3 12.x中
page.1作为FLUIDTEMPLATE时,旧TEMPLATE的file、marks等语法不再适用,需完全切换到新配置规范。 - 每次修改TypoScript后,必须清理全部缓存(后台「系统>清除缓存」),否则修改不生效。
内容的提问来源于stack exchange,提问作者Walter Schrabmair
相关产品推荐
相关产品推荐

