我在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
已停用,则立即在翻译版本中提取记录,并考虑对其进行排序。