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

Posted

技术标签:

【中文标题】TYPO3:在 Fluid 模板中硬编码的语言相关变量【英文标题】:TYPO3: language dependent variable that is hard-coded in a Fluid template 【发布时间】:2017-10-03 15:35:08 【问题描述】:

我有一个使用 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
        
    

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

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

【问题讨论】:

【参考方案1】:

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

所以,第三种可能性是创建一个内容元素(最好是header 类型)并创建一个保存其uid 的TypoScript 常量。

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

然后在你的流体变量中获取这个内容元素的标题:

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 所建议的:

专业版:与您所做的一样,简单,代码少,无需访问文件即可进行更改 con:需要在常量中添加另一个常量并为每种其他语言设置

locallang.xlf

专业版:这是您期望翻译的地方(在代码中),易于添加翻译,可以转到 VCS con:需要文件访问权限才能更改

内容元素

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

【讨论】:

各位,请随意编辑和添加优缺点! 感谢 undko,我需要一点时间,但 mathias 的回答很准确,我尽量让编辑保持简单,这对我来说是一个占主导地位的专业人士 感谢您的建议,我是否需要比一行标题更多的信息.​​..然后我可能会采用您的 CE 解决方案!【参考方案2】:

我建议对常量使用语言标识符:

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]

【讨论】:

ciao mathias !!您能否添加设置代码...然后您的答案被接受! 我会在 locallang.xlf 文件中使用标签; IMO 它可以得到更好的维护 Ciao Riccardo !!我不会授予对 xlf 文件的编辑器的访问权限!此外,它的技术建议方式,我现在正在测试 mathias 的建议......这就是编辑应该期待这样的设置的地方

以上是关于TYPO3:在 Fluid 模板中硬编码的语言相关变量的主要内容,如果未能解决你的问题,请参考以下文章

Fluid Powered TYPO3 FLUX Fluidcontent - 前端没有输出?

Typo3扩展配置

从另一个扩展部分渲染 TYPO3 Fluid

<![CDATA[ ... ]]> 在 TYPO3 v8 Fluid 中不起作用

TYPO3 Fluid complex if 条件

Typo3 Fluid - 如何检查两个或多个 colPos 是不是有内容然后打印 HTML