尊重TYPO3前端中原始语言的排序(如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

但我不确定这是否有关联。DB中的排序对于某些字段来说确实是错误的。它可以通过在页面或列表模块中移动单个CE来纠正。锻造厂里有许多相关的古代虫子。

我的问题:

  • 是否有一个脚本可以根据主语言修复整个网站翻译的CE的排序?

  • 前端是否有类似defLangBinding的东西——这也会有所帮助,因为错误的排序值将变得毫无意义。或者修改styles.content.get查询?

为什么不尝试再次同步您的内容记录?如果第二种语言中没有或只有少数排他记录,则可以通过纯SQL来实现这一点。否则,你会把事情搞得更糟。

此查询将为您提供一个带有默认语言和翻译记录的表,其中包括排序值:

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;

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

要检查是否有默认语言中没有父级的记录,可以使用以下查询:

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

至于您的配置,请参阅sys_language_overlay:的手册

如果设置,则CONTENT cObject选择的某些表中的记录使用"languageField"设置将选择默认语言(0)而不是由sys_language_uid/sys_language_mode设置的任何语言。此外,系统将查找所选内容的翻译记录和覆盖配置的字段。

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

既然sys_language_overlay已停用,则立即在翻译版本中提取记录,并考虑对其进行排序。

最新更新