基于当前前端语言的TYPO3加载对象

时间:2019-02-07 09:29:21

标签: typo3 typoscript fluid

我正在运行Typo3 v9.5.4 Onepager风格的网站。内容直接从tt_content加载。该网站有两种FE语言(德语/英语)。 我有一个带有定位链接的CTA按钮。该按钮是用错字创建的。我为德语版本创建了一个按钮,为英语版本创建了一个按钮,因为它们具有另一个值和另一个ancorlink。

我不确定是否可以直接从Fluid ViewHelper中访问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>

这是我对两个按钮对象的打字稿

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 Content加载时没有Fluidtemplate,它直接从tt_content加载内容):

//--------------------- 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
    }


}

因此,如果内容包含sys_language_uid 1(英语),我想加载buttonEn。否则,我希望它加载buttonDe。

我是否需要创建一个Typoscript对象,然后将该对象加载到f:if viewhelper中?如果是这样,我如何创建此Typoscript对象。

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

您应该使用locallang文件,并在TypoScript中引用它。

  1. 创建名为locallang.xlf的locallang文件(复制现有文件并删除所有值)
  2. 在其中添加您的英文标签
  3. 在同一文件夹中创建本地语言文件,并在文件名(de.前加上de.locallang.xlf,并添加德语标签
  4. 使用lib.button.data = LLL:EXT:your_ext/path/to/locallang/locallang.xlf:buttonLabel在TypoScript中进行引用,请参见https://docs.typo3.org/typo3cms/TyposcriptReference/DataTypes/Index.html#lll

此TS getText函数根据设置的语言ID自动获取标签,并且按钮仅需要一个TS。

示例:https://docs.typo3.org/typo3cms/TyposcriptIn45MinutesTutorial/UsingGetText/Index.html

答案 1 :(得分:0)

简单方法(纯文字)

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]

但是专业的解决方案是在语言文件中配置标签(请参见ThomasLöffler的答案)并使用:

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]

对于与语言相关的常量数据,您可以使用拼写条件重新定义非默认语言的值。 (或定义每种语言的后备条件)。