Загрузка объекта TYPO3 на основе текущего языка интерфейса - PullRequest
0 голосов
/ 07 февраля 2019

У меня работает сайт Typo3 v9.5.4 Onepager.Контент загружается непосредственно из tt_content.Веб-сайт имеет два языка FE (немецкий / английский).У меня есть кнопка CTA, которая имеет ссылку.Кнопка создать с опечаткой.Я создал одну кнопку для немецкой версии и одну для английской версии 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):

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

DoМне нужно создать объект Typoscript, а затем загрузить этот объект в F: если Viewhelper?Если да, то как мне создать этот объект Typoscript.

Спасибо за вашу помощь!

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

Простой способ (чистый текст)

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]

Для константных данных, зависящих от языка, вы можете использовать условия опечатки, чтобы переопределить значение для языков, отличных от используемых по умолчанию.(или определить запасной вариант и условия для каждого языка.)

0 голосов
/ 07 февраля 2019

Вы должны использовать файл locallang и обращаться к нему в TypoScript.

  1. Создать файл locallang (скопировать существующее и удалить все значения) с именем locallang.xlf
  2. Добавить свойтам есть английская метка
  3. Создайте файл locallang в той же папке с добавлением de. в имени файла (de.locallang.xlf) и добавьте немецкую метку
  4. Обратитесь к нему в TypoScript, используяlib.button.data = LLL:EXT:your_ext/path/to/locallang/locallang.xlf:buttonLabel, см. https://docs.typo3.org/typo3cms/TyposcriptReference/DataTypes/Index.html#lll

Эта функция TS getText автоматически получает метку в зависимости от установленного идентификатора языка, и вам требуется только один TS для кнопки.

Пример: https://docs.typo3.org/typo3cms/TyposcriptIn45MinutesTutorial/UsingGetText/Index.html

...