我运行一个TYPO3的v9.5.4 Onepager风格的网站。内容是直接从tt_content加载。该网站有两个FE语言(德语/英语)。我有一个CTA按钮,有一个anchorlink。按钮是Typo脚本创建。我创建了一个按钮,德语版,一个是英语VERSON BC他们还有另外一个值,另一ancorlink。
我不知道如果我可以从流体视图助手直接访问tt_content场。这是我的代码我试过
<f:if condition="{tt_content.sys_language_uid} == 1">
<f:then>
<f:format.raw>{buttonEn}</f:format.raw>
</f:then>
<f:else>
<f:format.raw>{buttonDe}</f:format.raw>
</f:else>
</f:if>
这是我的两个按钮对象的TypoScript
lib.buttonDe = TEXT
lib.buttonDe {
value = German Text
stdWrap.typolink.parameter = #anchorlinkDE
stdWrap.typolink.ATagParams = class="button"
}
lib.buttonEn = TEXT
lib.buttonEn {
value = English Text
stdWrap.typolink.parameter = #anchorlinkEN
stdWrap.typolink.ATagParams = class="button"
}
这是加载内容的多国语言菜单和Fluidtemplate(该Onepager内容加载没有Fluidtemplate,它加载直接从tt_content内容)的Typo脚本:
//--------------------- One Pager Content
lib.sectionContent = HMENU
lib.sectionContent {
excludeUidList = 12,13,16,17,29
1 = TMENU
1 {
NO = 1
NO {
doNotLinkIt = 1
stdWrap >
stdWrap {
cObject = COA
cObject {
if.value = 4
if.equals.field = doktype
if.negate = 1
10 < temp.titleSectionId
10.wrap = <section id="|">
20 = CONTENT
20 {
table = tt_content
select {
pidInList.field = uid
orderBy = colPos,sorting
# Only selects Content where CE Layout is 0
where = (tt_content.layout = "0")
}
wrap = <div class="container">|</div>
renderObj < tt_content
}
30 = TEXT
30 {
wrap = </section>
}
}
}
}
}
}
//---------------------
// Language Selector
lib.langmenu = HMENU
lib.langmenu {
special = language
addQueryString = 1
special.value = {$config.language.uids}
1 = TMENU
1 {
wrap = <ul class="dg-langmenu row">|</ul>
NO = 1
NO {
stdWrap.current = 1
stdWrap.setCurrent = {$config.language.labels}
allWrap = <li class="col s6">|</li>
}
ACT < .NO
ACT.doNotLinkIt = 1
ACT.allWrap = <li class="act col s6">|</li>
}
}
page = PAGE
page{
10 = FLUIDTEMPLATE
10 {
templateName = TEXT
templateName.stdWrap{
cObject = TEXT
cObject{
data = levelfield:-2,backend_layout_next_level,slide
override.field = backend_layout
split {
token = pagets__
1.current = 1
1.wrap = |
}
}
ifEmpty = onePager
}
templateRootPaths {
10 = {$path.privat}Templates/
}
layoutRootPaths {
10 = {$path.privat}Layouts/
}
partialRootPaths {
10 = {$path.privat}Partials/
}
variables{
buttonDe < lib.buttonDe
buttonEnd< lib.buttonEn
}
}
所以我想加载buttonEn如果内容有sys_language_uid 1(英文)一样,我希望它加载buttonDe。
我需要创建一个Typo脚本对象,然后这个对象加载到F:如果视图助手?如果是的话我怎么创造这个Typo脚本对象。
谢谢你的帮助!
最简单的方法(纯Typo脚本)
lib.button = TEXT
lib.button {
value = English text
lang.de = Deutscher Text
stdWrap.typolink.parameter = #anchorlinkDE
stdWrap.typolink.ATagParams = class="button"
}
[siteLanguage("locale") == "en_EN.UTF-8"]
lib.buton.stdWrap.typolink.parameter = #anchorlinkEN
[global]
但专业的解决方案是在语言文件(见托马斯洛夫勒答案),并使用配置您的标签:
lib.button = TEXT
lib.button {
lib.button.data = LLL:EXT:site_extension/Resources/Private/Language/locallang.xlf:button_label
stdWrap.typolink.parameter = #anchorlinkEN
stdWrap.typolink.ATagParams = class="button"
}
[siteLanguage("locale") == "de_DE.UTF-8"]
lib.buton.stdWrap.typolink.parameter = #anchorlinkDE
[global]
对于语言相关的常数数据可能使用的TypoScript条件重新定义您的非默认语言的值。 (或定义为每种语言回退和条件。)
您应该使用locallang文件,并指它在Typo脚本。
locallang.xlf
de.
)前面加上de.locallang.xlf
同一文件夹中locallang文件,并添加德国标签lib.button.data = LLL:EXT:your_ext/path/to/locallang/locallang.xlf:buttonLabel
引用它的Typo脚本,看到https://docs.typo3.org/typo3cms/TyposcriptReference/DataTypes/Index.html#lll该TS的getText功能自动获得根据设定的语言ID标签,你只需要为按钮一个TS。
例如:https://docs.typo3.org/typo3cms/TyposcriptIn45MinutesTutorial/UsingGetText/Index.html