尊重 TYPO3 前端中原始语言的排序(如 defLangBinding)

Respect sorting of original language in TYPO3 Frontend (like defLangBinding)

我在 TYPO3 6.2 中为翻译记录 (sys_language_uid=1) 设置了一些 tt_content.sorting 的混乱值。

这意味着 styles.content.get 在原始语言中显示正确的顺序(在后端可见),但在翻译后的语言中不显示(在后端一切看起来都很好,如下所示 defLangBinding 但在前端,使用了 sorting 字段的错误值,因此排序混乱。

我们在过去几周确实修改了一些设置

  // before
  // config.sys_language_mode = content_fallback:1,0
  // config.sys_language_overlay = hideNonTranslated

  // currently
  config.sys_language_mode = strict
  config.sys_language_overlay =0

但我不确定这是否相关。对于某些字段,数据库中的排序确实是错误的。它可以通过移动页面或列表模块中的单个 CE 来纠正。 forge上有很多相关的远古bug。

我的问题:

您为什么不尝试再次同步您的内容记录呢?这可以通过纯 SQL 如果 没有或只有少数第二语言的独占记录来完成。否则,你会把事情搞得更糟。

此查询将为您提供 table 并排显示默认语言和翻译后的记录,包括排序值:

select a.header, a.uid, a.sorting, b.sorting, b.uid, b.header from tt_content as a inner join tt_content as b on a.uid=b.l18n_parent where b.l18n_parent > 0 and a.sys_language_uid = 0 and not a.deleted and not b.deleted;

然后您可以将此查询调整为更新查询,将 table b 的排序值设置为 table a 中的排序值。

要检查您是否有默认语言的没有父项的记录,您可以使用此查询:

select * from tt_content where sys_language_uid > 0 AND l18n_parent = 0 AND NOT deleted

至于你的配置,看看manual for sys_language_overlay:

If set, records from certain tables selected by the CONTENT cObject using the “languageField” setting will select the default language (0) instead of any language set by sys_language_uid / sys_language_mode. In addition the system will look for a translation of the selected record and overlay configured fields.

所以这似乎与您的问题有关:之前,TYPO3(也许 - 您没有 post sys_language_overlay 的设置)被配置为首先以默认语言获取记录,尝试用翻译覆盖它们然后输出它。

现在 sys_language_overlay 已停用,将立即在翻译版本中获取记录并考虑对它们进行排序。