Typo3 8.7.x/Extbase/Typoscript:使用RECORDS时如何移除锚点包裹
解决TYPO3 AJAX JSON输出中锚点链接的问题
这个锚点<a id="c2"></a>是TYPO3默认渲染tt_content元素时自动添加的——系统会给每个内容元素生成锚点方便页面内跳转,但在你需要纯JSON输出的场景下,就会污染结果。下面是几种有效的解决方法:
方法1:自定义RECORDS渲染对象,跳过默认模板
直接指定renderObj为TEXT(或组合对象COA),只提取你需要的字段内容,完全绕开默认的tt_content模板(锚点就是在这里生成的):
ajax = PAGE ajax { typeNum = 99 config { disableAllHeaderCode = 1 additionalHeaders = Content-type:application/json admPanel = 0 debug = 0 } 10 = RECORDS 10 { tables = tt_content source = 77 # 指定自定义渲染对象,只输出目标字段 renderObj = TEXT renderObj { # 替换成你实际需要的字段,比如header、bodytext field = bodytext # 如果需要组合多个字段成JSON结构,可改用COA: /* renderObj = COA renderObj { 10 = TEXT 10.dataWrap = {"header":"{field:header}", 20 = TEXT 20.dataWrap = "bodytext":"{field:bodytext}"} # 转义特殊字符,保证JSON格式合法 stdWrap.htmlSpecialChars = 1 stdWrap.jsonEncode = 1 } */ } } }
方法2:临时覆盖tt_content模板,移除锚点逻辑
如果需要保留默认内容渲染但去掉锚点,可以针对这个typeNum覆盖tt_content的innerWrap配置,删掉锚点生成代码:
ajax = PAGE ajax { typeNum = 99 config { disableAllHeaderCode = 1 additionalHeaders = Content-type:application/json admPanel = 0 debug = 0 } # 移除tt_content默认的锚点生成代码 tt_content.stdWrap.innerWrap.cObject.default.10 > 10 = RECORDS 10 { tables = tt_content source = 77 } }
方法3:使用CONTENT对象+JSON格式化(最推荐)
这种方式更灵活,能精准控制输出的JSON结构,同时彻底避免锚点问题:
ajax = PAGE ajax { typeNum = 99 config { disableAllHeaderCode = 1 additionalHeaders = Content-type:application/json admPanel = 0 debug = 0 } 10 = CONTENT 10 { table = tt_content select { uidInList = 77 } renderObj = TEXT renderObj { # 自定义JSON结构,包含你需要的所有字段 dataWrap = {"uid":"{field:uid}","header":"{field:header}","bodytext":"{field:bodytext}"} # 自动转义特殊字符,确保JSON格式完全合法 stdWrap.jsonEncode = 1 } } }
注意事项
- 确保字段名和
tt_content表中的实际字段一致(比如bodytext是富文本字段,header是标题字段) - 如果需要输出多个内容元素,调整
source或uidInList的值即可 - 用
stdWrap.jsonEncode能自动处理引号、换行等特殊字符,避免JSON格式错误
内容的提问来源于stack exchange,提问作者Ralf
相关产品推荐
相关产品推荐

