You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TYPO3 v10修复language=all的Gridelements翻译CE渲染异常

TYPO3 Gridelements 多语言容器渲染问题修复

当前运行环境为TYPO3 10.4.28,搭配gridelements 10.4.3(未启用DataProcessing)。

为减少多语言站点的内容冗余,我将无自有文本内容的内容元素(CE)设置为language=all,仅翻译包含文本内容的CE。对于未使用标题或其他自有文本字段的网格容器,设置为language=all是十分合理高效的方案:即可将容器内的插件、菜单元素、图片统一设为Language=all,即使容器内同时包含已翻译的文本CE也可正常管理。

但在language=all属性的gridelements容器内放置翻译CE时,翻译页面的前端渲染会出现异常:

  • fallbacktype: strict/fallback模式下翻译CE会重复渲染
  • fallbacktype: free模式下会渲染出所有语言版本的CE

据gridelements维护者@Jo Hasenau说明,未修改的原生gridelements不直接支持将翻译元素放入language=all容器。

方案尝试

fallbacktype: free模式配置

配置代码如下:

[siteLanguage("languageId") == 1]
    lib.gridelements.defaultGridSetup.columns.default.renderObj.20.stdWrap.if {
        isInList.field = sys_language_uid
        # -1 对应 language=all
        value = -1,1
    }
[GLOBAL]
# 仅允许当前语言或"all"语言的内容渲染
# 其他语言ID需重复添加对应条件配置

该配置存在明显缺陷:free模式下,翻译元素在前端的排序依据是自身的sorting字段,而非对应原元素的排序,会导致翻译元素与Language=all元素的相对位置和默认语言不一致,在大型站点中手动修正排序成本极高,适用性较差。

fallbacktype: strict模式初始配置尝试

strict模式下的默认渲染逻辑为:先渲染带翻译覆盖层的原元素,再渲染独立的翻译项本身。基于这个逻辑我最初尝试添加如下过滤配置:

lib.gridelements.defaultGridSetup.columns.default.renderObj.20.stdWrap.if {
    isFalse.field = l18n_parent
}

原本预期该配置仅过滤独立的翻译项,但实际会同时过滤掉翻译覆盖层,经排查该渲染节点下两类元素的TypoScript识别属性完全一致,无法直接通过字段判断区分。

最终结果

目前已找到适用于strict和fallback模式的纯TypoScript解决方案,前述free模式的配置技术上可正常运行,仅因排序问题适用性较差,该渲染异常问题已基本解决。

开发提示:计划使用该结构的开发者需要注意,sys_language_uid -1即Language All特性可能在TYPO3后续版本中被移除。

内容的提问来源于stack exchange,提问作者Wolfgang Löer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.31 00:18:39