【问题标题】:typoscript conditional typolink-parameter排版条件排版链接参数
【发布时间】:2014-10-02 08:04:19
【问题描述】:

TS 令人困惑 :)

我正在尝试根据语言创建带有条件参数的错字链接。

10 = TEXT
  10 {
    typolink {
      parameter = http://myLink.com
      returnLast = url
      if.isTrue.data = GP:L = 1
    }
    wrap (
            <li class="mod-metanav--item">
             <a class="mod-metanav--link" target="_blank" href="|">
              The Link
             </a>
            </li>
    )
  }

如您所见,我尝试在错字链接中添加一个 IF 语句,询问一种语言(至少,我认为我是这样做的)。

问题是,根据当前的语言,我想要一个不同的链接(但其余的需要保持不变)。

我可以使用[globalVar = GP:L = 1],但这会产生巨大的开销,因为这个错字链接只是更大脚本部分的一小部分。

我尝试在 Google 上搜索可以添加到参数中的变量或常量,但没有任何有用的结果...

帮助! :)

【问题讨论】:

    标签: if-statement typo3 typoscript typolink


    【解决方案1】:

    要根据当前语言覆盖链接值,您可以使用 »lang« 参数。

    要根据当前语言更改链接 url,您可能需要使用 CASE 对象...

    10 = TEXT
    10 {
        value = English
        lang.de = German
        lang.fr = French
        typolink.parameter.cObject = CASE
        typolink.parameter.cObject {
            key.data = GP:L
            1 = TEXT
            1.value = http://example.com/german/bar/
            2 = TEXT
            2.value = http://example.com/french/baz/
            default = TEXT
            default.value = http://example.com/englisch/foo/
        }
        typolink.ATagParams = class="mod-metanav--link"
        typolink.extTarget = _blank
        wrap = <li class="mod-metanav--item">|</li>
    }
    

    …或者你使用一个常量:

    常量:

    languagedependentlink = http://example.com/englisch/foo/
    [globalVar = GP:L = 1]
        languagedependentlink = http://example.com/german/bar/
    [global]
    [globalVar = GP:L = 2]
        languagedependentlink = http://example.com/french/baz/
    [global]
    

    设置:

    10 = TEXT
    10 {
        value = English
        lang.de = German
        lang.fr = French
        typolink.parameter = {$languagedependentlink}
        typolink.ATagParams = class="mod-metanav--link"
        typolink.extTarget = _blank
        wrap = <li class="mod-metanav--item">|</li>
    }
    

    【讨论】:

    • 另一个问题,如果可以的话:如果我想使用translation.xml,我将如何使用该值?我试过 value = LLL:fileadmin/content/translation.xml:theValue - 但这似乎不起作用......(呃 - 我知道这一定是基本的东西,但我找不到好的教程或其他资源- 有什么提示吗?)
    • 不客气!对于 locallang:只需使用 data 属性而不是 value。 »data = LLL:fileadmin/content/translation.xml:theValue«(见docs.typo3.org/typo3cms/TyposcriptReference/DataTypes/Gettext/…
    • 本教程 docs.typo3.org/typo3cms/TyposcriptIn45MinutesTutorial 是 TypoScript 的一个良好开端——完整的参考资料可以在这里找到 docs.typo3.org/typo3cms/TyposcriptReference
    • 谢谢两位!非常感谢 TS-jungle 中的指导 :)
    • 解决方案 1 的有趣之处在于,这在当前版本中永远不会中断(在编写此答案时当时还不知道)。这意味着TypoScript 无条件兼容 TYPO3 版本 6、7、8、9 以及 2019 年秋季即将推出的版本 10。
    【解决方案2】:

    再一次,我正在回答我自己的问题 - 可能对其他人有所帮助。

    10 = TEXT
      10 {
        typolink {
          parameter = myLinkInEnglish
          returnLast = url
        }
        wrap (
                <li class="mod-metanav--item">
                 <a class="mod-metanav--link" target="_blank" href="|">
                  Click here
                 </a>
                </li>
        )
        if.value = 1
        if.equals.data = GP:L
      }
    

    再一次,我对此并不满意,因为我必须为每种语言重复相同的块。我宁愿有一个可以为链接和链接文本设置的变量(使用后者的翻译)。

    如果有人有更好的解决方案,我很乐意知道...

    【讨论】:

    • 显然这«有点»有效 - 不过我推荐pixelbrackets的解决方案
    【解决方案3】:

    嗯,也许我错了,但它看起来不像是巨大的开销:

    10 = TEXT
      10 {
        typolink {
          parameter = http://worldwide.com
          returnLast = url
        }
        wrap (
                <li class="mod-metanav--item">
                 <a class="mod-metanav--link" target="_blank" href="|">
                  The Link
                 </a>
                </li>
        )
    }
    
    [globalVar = GP:L = 1]
    10.10.typolink.parameter = http://english.co.uk
    [end]
    
    [globalVar = GP:L = 2]
    10.10.typolink.parameter = http://german.de
    [end]
    
    [globalVar = GP:L = 3]
    10.10.typolink.parameter = http://french.fr
    [end]
    

    【讨论】:

    • 好吧,据我了解文档,[globalVAr...] 方法在花括号 {...} 内不起作用 - 这就是我的错字链接... 所以 pixelbrackets ' 解决方案是完美的......不过,我也会将您的解决方案添加到我的书中 - 在其他情况下可能会有所帮助:) 谢谢!
    • 当然,因此它在外面, - 当然,如果您的 10 = TEXT 嵌套在某个对象中,您需要反映它并将条件移动到对象的 root 级别即:lib.somemenu.10.10.typolink.parameter = http://german.de
    • 好吧,我刚刚学到了关于打字稿的另一件事:) - 我真的不知道哪种方法会更好。我仍然更喜欢pixelbracket的方法,因为它可以将东西放在一起。根据我有多少变量,你的方法可能会有点混乱......但这只是一个菜鸟的观点:)
    • 最好的方法是使用一个 :) 因为 pixelbrackets' 对你有用,这意味着它很好 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多