2

我想检查一个值的两个字段来包装每个内容元素。

要检查一个值,您可以执行以下操作:

20 = TEXT
20.value = <div class="div1">|</div>
20.value.override = <div class="div2">|</div>
20.value.override.if.value = 10
20.value.override.if.equals.field = colPos

我必须添加什么来检查这样的第二个值?

20 = TEXT
20.value = <div class="div1">|</div>
20.value.override = <div class="div2">|</div>
20.value.override.if.value = 10
20.value.override.if.equals.field = colPos
20.value.override.andIf.value = textmedia
20.value.override.andIf.equals.field = CType

因此,仅当 CType 为 textmedia 且 colPos 为 10 时,内容元素才应使用 div2 包装。否则应使用 div1。

4

2 回答 2

3

如果出现以下情况,您可以使用 dataWrap 组合值并在单个中比较它们:

20 = TEXT
20.value = <div class="div1">|</div>
20.value.override = <div class="div2">|</div>
20.value.override.if.value = 10textmedia
20.value.override.if.equals.dataWrap = {field:colPos}{field:CType}

当您想根据组合获取更多具有不同结果的值时,使用 CASE 对象可能是更好的方法:

20 = CASE
20.key.dataWrap = {field:myfield1}{field:myfield2}{field:myfield3}
20.default = TEXT
20.default.value = <div class="div1">|</div>
20.001 = TEXT
20.001.value = <div class="div001">|</div>
20.101 = TEXT
20.101.value = <div class="div101">|</div>

当值可以包含多个 0 或 1 时,要分隔它们,您应该在 dataWrap 中添加一个分隔符,如 x。

20.key.dataWrap = {field:myfield1}x{field:myfield2}x{field:myfield3}
于 2017-10-02T19:20:39.177 回答
2

使用连词的 stdWrap 属性可以嵌套 Typoscript“if”条件。在您的情况下,文档说,条件与 AND 连词有关。因此,您只需要使用另一个条件的 stdWrap 属性(让我们采用 isTrue),并通过使用 stdWrap 的 cObject 属性使其成为 TEXT 对象。然后,您可以在 cObject 中放置另一个“等于”条件,如果满足条件,则返回“1”到 isTrue。

像这样尝试,未测试

20 = TEXT
20 {
    value = <div class="div1">|</div>
    value {
        override = <div class="div2">|</div>
        override.if {
            # Condition 1
            value = 10
            equals.field = colPos
            # Another "equals" condition nested in isTrue using cObject
            isTrue.cObject = TEXT
            isTrue.cObject {
                value = 1
                if.value = textmedia
                equals.field = CType
            }
        }
    }
}

在 Typocript 中创建 OR 条件也是可能的。您可以将 isTrue 属性转换为包含多个 TEXT 对象的 COA,如果满足它们的条件,这些对象将返回类似 1 的内容。

创建 OR 的示例:

20 = TEXT
20 {
    value = <div class="div1">|</div>
    value {
        override = <div class="div2">|</div>
        override {
            if.isTrue.cObject = COA
            if.isTrue.cObject {
                10 = TEXT
                10 {
                    value = 1
                    if.value = 10
                    if.equals.field = colPos
                }
                20 = TEXT
                20 {
                    value = 1
                    value = textmedia
                    equals.field = CType
                }
            }
        }
    }
}

关于此的一些有用的文档:

https://docs.typo3.org/typo3cms/TyposcriptReference/Functions/If.html

https://docs.typo3.org/typo3cms/TyposcriptReference/Functions/Stdwrap.html

于 2017-09-26T08:24:38.507 回答