在 TypoScript 中创建多个 if 条件
Make multiple if conditions in TypoScript
我想检查一个值上的两个字段以包装每个内容元素。
要检查一个值,您可以这样做:
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。
Typoscript "if" 条件的嵌套可以通过使用连词的 stdWrap 属性来实现。在您的情况下,文档说,条件与 AND 连词相关联。因此,您只需要使用另一个条件的 stdWrap-properties(假设为 isTrue)并使用 stdWrap 的 cObject 属性 使其成为 TEXT 对象。然后,您可以在 cObject 中放置另一个 "equals" 条件,如果满足条件,则返回“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
您可以使用 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}
我想检查一个值上的两个字段以包装每个内容元素。
要检查一个值,您可以这样做:
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。
Typoscript "if" 条件的嵌套可以通过使用连词的 stdWrap 属性来实现。在您的情况下,文档说,条件与 AND 连词相关联。因此,您只需要使用另一个条件的 stdWrap-properties(假设为 isTrue)并使用 stdWrap 的 cObject 属性 使其成为 TEXT 对象。然后,您可以在 cObject 中放置另一个 "equals" 条件,如果满足条件,则返回“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
您可以使用 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}