尊重 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。
我的问题:
是否有脚本可以根据主要语言修复整个站点的翻译 CE 排序?
前端是否有类似 defLangBinding
的东西 - 这也会有所帮助,因为错误的排序值将变得毫无意义。或者修改 styles.content.get
查询?
您为什么不尝试再次同步您的内容记录呢?这可以通过纯 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
已停用,将立即在翻译版本中获取记录并考虑对它们进行排序。
我在 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。
我的问题:
是否有脚本可以根据主要语言修复整个站点的翻译 CE 排序?
前端是否有类似
defLangBinding
的东西 - 这也会有所帮助,因为错误的排序值将变得毫无意义。或者修改styles.content.get
查询?
您为什么不尝试再次同步您的内容记录呢?这可以通过纯 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
已停用,将立即在翻译版本中获取记录并考虑对它们进行排序。