You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Typo3 11中Typoscript生成的分类菜单查询异常,无法获取翻译

问题分析与解决方案

核心问题

你的SQL查询里的错误条件是因为TYPO3 CONTENT对象默认的语言查询逻辑没有正确适配sys_category的翻译机制——分类翻译条目sys_language_uid≠0时,l10n_parent必然指向原语言分类的UID而非0,所以那部分OR条件确实恒为假,导致无法获取翻译内容。同时你的Typoscript还存在拼写错误,这也会影响查询结果。

步骤1:修正Typoscript拼写错误与添加语言配置

你的selectFields里把sys_category误写为sys_scategory,同时需要添加语言覆盖相关配置,让CONTENT对象正确处理多语言分类:

lib.productsMenu = CONTENT
lib.productsMenu {
    table = sys_category
    select {
        pidInList = {$plugin.tx_products.productsCategoriesStoragePid}
        # 修正拼写错误:sys_scategory → sys_category
        selectFields = sys_category.uid AS category_uid, sys_category.title AS category_title
        where = sys_category.uid != 28
        groupBy = sys_category.uid
    }
    # 关键配置:启用语言覆盖并遵循当前系统语言
    languageOverlay = 1
    respectSysLanguage = 1
    # 可选:无翻译时回退显示默认语言内容
    # languageMode = content_fallback
}

步骤2:理解语言查询逻辑的修正

添加languageOverlay = 1和respectSysLanguage = 1后,TYPO3会自动调整SQL查询逻辑:

  • 优先匹配当前语言的分类翻译条目(sys_language_uid = 当前语言ID且l10n_parent对应原分类UID)
  • 若没有翻译条目,根据languageMode配置决定是否回退到原语言条目
  • 自动生成正确的语言过滤条件,替代你之前看到的错误OR逻辑

步骤3:验证分类翻译的正确性

确认你的分类翻译条目满足以下要求:

  • sys_language_uid设置为目标语言ID(比如1)
  • l10n_parent正确关联原语言(默认语言)的分类UID
  • 翻译条目未被隐藏/删除,且生效时间(starttime/endtime)正常

步骤4:检查生成的SQL(可选)

配置修正后,生成的SQL语言条件会变为类似以下形式,能正确匹配翻译条目:

SELECT sys_category.uid AS category_uid, sys_category.title AS category_title...
FROM sys_category 
WHERE (...) 
AND ((sys_category.sys_language_uid IN (0, -1)) OR (sys_category.l10n_parent IN (原分类UID列表) AND sys_category.sys_language_uid = 1))

额外提示

如果网站语言配置使用sys_language_mode = strict,需确保每个分类都有对应翻译条目才会显示;若想允许无翻译时显示原语言内容,设置languageMode = content_fallback即可。

内容的提问来源于stack exchange,提问作者arderoma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 15:27:30