【问题标题】:TYPO3: TypoScript override if condition with andTYPO3:如果条件带有和,则 TypoScript 覆盖
【发布时间】:2021-04-28 10:02:59
【问题描述】:

我有一个 TypoScript 布局,需要一个带有第二个内部的 if 语句

stdWrap.dataWrap = <div class="grid col1 lay{field:layout}">|</div>

如果 header_layout 未设置为 100,则现在设置覆盖:

stdWrap.dataWrap.override = <div class="header"><h4>{field:header}</h4><h5>{field:subheader}</h5></div><span class="hitter"></span><div class="grid col1 lay{field:layout}">|</div>
stdWrap.dataWrap.override.if{
    value = 100
    equals.field = header_layout
    negate = 1

这有效,但如果没有设置标题,用户不会将 header_layout 设置为隐藏,所以我想检查字段标题是否不为空,但这不起作用:

stdWrap.dataWrap.override.if{
    value = 100
    equals.field = header_layout
    negate = 1
    isTrue.cObject = TEXT
    isTrue.cObject{
        value = 1
        if.value = 
        equals.field = header
        negate = 1

如果设置了 header 并且 header_layout 为 100,则呈现简单输出,但如果 header 为空且 header_layout 不是 100,则将呈现覆盖并添加空 html 标签。

我认为第二个条件将被视为“或”而不是“和”,这个 TypoScript 应该是什么样子?

【问题讨论】:

    标签: typo3 typoscript


    【解决方案1】:

    如果您使用多个条件,则必须注意诸如.negate 之类的全局修饰符。它们不能分配给单个条件,而是所有单个条件的整体anded 结果。
    据我了解您的逻辑,我认为您错过了对级联.if 的否定。如果您使用适当的条件(.isTrue 或因为否定.isFalse),您也可以避免比较为空

    否则您可能需要构建一个复杂的条件。

    有很多选择:

    • 使用.ifempty、``.override, .if`的多种组合
    • 将COA 用于您的值或条件,其中每个简单条件都分配给一个数组对象:
    temp.test = COA
    temp.test {
       10 = TEXT
       10 {
          value = cond1
          if {
             value = 1
             equals.field = abc
          }
       }
       20 = TEXT
       20 {
          value = cond2
          if {
             value = 2
             equals.field = def
          }
       }
    }
    

    那么您可以按原样使用它或使用它来构建正确的条件:

    与:

    10 = TEXT
    10.value = my value
    10.ovreride = my override
    10.override.if {
       value =cond1cond2
       equals.cObject < temp.test
    }
    

    或者:

    10 = TEXT
    10.value = my value
    10.ovreride = my override
    10.override.if.isTrue.cObject < temp.test
    

    【讨论】:

    【解决方案2】:

    根据TSref中的解释,条件与AND相连。

    所以这些非常简单的条件应该匹配:

    • header_layout 必须小于 100
    • header 必须为“真”(=非空)

    作为 TypoScript:

    stdWrap.dataWrap.override.if {
      value = 100
      isLessThan.field = header_layout
      isTrue.field = header
    }
    

    【讨论】:

    • 100 是隐藏的,0-99 是布局。我将 isGreaterThan 更改为 isLessThan 他们成功了!谢谢!
    • 你是对的。我总是对哪个值在运算符的哪一侧有点困惑......并且剥离negate didN#t 让它更容易......(我修复了它)
    猜你喜欢
    • 1970-01-01
    • 2022-08-02
    • 2020-06-06
    • 2017-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多