如何通过TypoScript与Fluid获取多语言版本的内容元素?
获取TYPO3内容元素的翻译版本
问题描述
使用TypoScript获取内容元素十分简单:
lib.getSingleCE = CONTENT lib.getSingleCE { table = tt_content select { uidInList.field = myUid pidInList = 0 } }在Fluid模板中写法如下:
<f:cObject typoscriptObjectPath="lib.getSingleCE" data="{myUid: 3333}"/>但处理翻译时完全无从下手,请问如何获取内容元素3333的外文翻译版本?
解决方案
TYPO3中内容元素的翻译通过tt_content表的l10n_parent(关联原内容UID)和sys_language_uid(标记语言ID)字段实现,调整TypoScript查询逻辑即可获取对应语言的翻译内容。
调整后的TypoScript
lib.getSingleCE = CONTENT lib.getSingleCE { table = tt_content select { # 匹配当前语言下,以目标UID为父元素的翻译内容 where = l10n_parent = ###MY_UID### AND sys_language_uid = ###SYS_LANGUAGE_UID### # 开启fallback,无翻译时返回原内容 fallback = 1 # 插入动态参数 where.insertData = 1 markers { MY_UID.field = myUid # 自动获取当前前端语言ID(通过URL参数L传递) SYS_LANGUAGE_UID.data = GP:L } # 限制仅返回一条结果 max = 1 } }
Fluid模板调用
无需修改原有调用逻辑,依然可以直接传入原内容元素的UID:
<f:cObject typoscriptObjectPath="lib.getSingleCE" data="{myUid: 3333}"/>
额外配置说明
- 若要强制获取指定语言的翻译(比如固定获取ID为1的英文版本),可将
SYS_LANGUAGE_UID.data替换为固定值:SYS_LANGUAGE_UID.value = 1 - 若不需要fallback到原内容,可将
fallback = 1移除,此时无翻译时会返回空内容。
内容的提问来源于stack exchange,提问作者lisardo
相关产品推荐
相关产品推荐

