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

问题描述 投票:4回答:2

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

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

任何使口号可以用其他两种语言编辑的解决方案?

typo3 multilingual typoscript typo3-7.6.x
2个回答
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]

3
投票

有三种可能性,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上添加更多的东西才能让它发挥作用 - 我总是不确定。

现在有利有弊:

Three constants, as suggested by Mathias:

  • pro:关闭你所做的事情,简单,代码少,无需更改文件
  • con:需要为常量添加另一个常量并为每种其他语言设置

locallang.xlf:

  • 亲:您希望翻译(在代码中),易于添加翻译,可以转到VCS
  • con:需要文件访问权限才能更改

Content element:

  • 专业版:管理员可以授予编辑访问权限(如果需要),最容易添加翻译
  • con:添加数据库查询(但通常是缓存),很容易搞砸BE
© www.soinside.com 2019 - 2024. All rights reserved.