TYPO3:在 Fluid 模板中硬编码的语言相关变量

TYPO3: language dependent variable that is hard-coded in a Fluid template

我有一个使用 TYPO3 V7.6.18 构建的 多语言 站点。它使用的标语应保持可编辑但对于三种语言不同。这是在 Fluid 模板中硬编码的变量。

对于此类变量,我使用了一个文件 Configuration/TypoScript/constants.ts,我在其中定义了可以编辑 (WEB -> Template -> Constant Editor) 和使用的变量:

#---------------------------------------------------------------------
#   constants.ts
#---------------------------------------------------------------------

# customsubcategory=general=General Setup

myextension.configuration {
    general {
        # cat=myextension/general/05; type=string; label=Website Slogan.
        slogan= website slogan in main language
    }
}

[globalVar = GP:L=1]
    myextension.configuration.general.slogan = website slogan in second language
[end]

[globalVar = GP:L=2]
    myextension.configuration.general.slogan = website slogan in third language
[end]

然后我绑定Configuration/TypoScript/setup.ts中的变量使用:

#---------------------------------------------------------------------
#   setup.ts
#---------------------------------------------------------------------

page = PAGE
page {
    # Page Main template
    10 = FLUIDTEMPLATE
    10 {
        variables {
            # slogan
            slogan = TEXT
            slogan.value = {$myextension.configuration.general.slogan}
        }
    }
}

此代码有效,但只有主要语言的标语是可编辑的...

有什么解决方案可以让其他两种语言的标语可以编辑吗?

我建议改用语言标识符作为常量:

myextension.configuration {
    general {
        slogan {
          # cat=myextension/general/05; type=string; label=Website Slogan in default language.
          default = website slogan in main language
          # cat=myextension/general/06; type=string; label=Website Slogan in second language.
          second = website slogan in second language
          # cat=myextension/general/07; type=string; label=Website Slogan in third language.
          third = website slogan in third language
        }
    }
}

然后将条件移动到设置中:

page = PAGE
page {
    # Page Main template
    10 = FLUIDTEMPLATE
    10 {
        variables {
            # slogan
            slogan = TEXT
            slogan.value = {$myextension.configuration.general.slogan.default}
        }
    }
}

[globalVar = GP:L=1]
    page.10.variables.slogan.value = {$myextension.configuration.general.slogan.second}
[end]

[globalVar = GP:L=2]
    page.10.variables.slogan.value = {$myextension.configuration.general.slogan.third}
[end]

存在三种可能性,Mathias 和 Riccardo 提到了其中两种。我将添加第三个,列出它们的优缺点。

因此,首先是第三种可能性,即创建一个内容元素(最好是 header 类型)并创建一个 TypoScript 常量来保存其 uid.

# cat=myextension/general/05; type=int; label=Slogan CE UID
myextension.configuration.general.sloganUid = 

然后在您的流体变量中获取此内容元素的 header:

page.10.variables.slogan = CONTENT
page.10.variables.slogan {
    select.uidInList = {$myextension.configuration.general.sloganUid}
    table = tt_content
    renderObj = TEXT
    renderObj.field = header
}

创建一个 sysfolder,创建一个 header 类型的内容元素,并在您的常量中探测它的 uid。也许您需要向 .select 添加更多内容才能使其正常工作 - 我一直不确定。

现在优缺点:

三个常量,正如 Mathias 所建议的:

  • pro:关闭您所做的,简单,代码少,更改不需要文件访问权限
  • con: 需要为每个额外的语言添加另一个常量和设置

locallang.xlf:

  • pro: 就是你期待翻译的地方(在代码中),很容易添加翻译,可以去VCS
  • con:需要文件访问权限才能更改

内容元素:

  • pro:管理员可以授予编辑访问权限(如果他们愿意),最容易添加翻译
  • con:添加数据库查询(但通常缓存),很容易从 BE
  • 搞砸