TypoScript:如果为空则覆盖 COA

TypoScript: override COA if empty

我有 2 个 COA:lib.productContentlib.categoryContent,其中包含来自用户函数的数据。 我还有第三份 COA - lib.seoColumns - 默认情况下应包含产品 COA。如果产品COA为空,应该被品类COA覆盖,但不知道如何实际检查产品COA是否为空:

########## PRODUCT CONTENT ##########
lib.productContent = COA
lib.productContent {
    10 = USER
    10 {
        userFunc = Vendor\Provider\UserFunc\Page->getPageContentByAlias
        alias = TEXT
        alias.data = GP:product
        aliasField.cObject = TEXT
        aliasField.cObject.value = product_alias
    }
}

########## CATEGORY CONTENT ##########
lib.categoryContent = COA
lib.categoryContent {
    10 = USER
    10 {
        userFunc = Vendor\Provider\UserFunc\Page->getPageContentByAlias
        alias = TEXT
        alias.data = GP:category
        aliasField.cObject = TEXT
        aliasField.cObject.value = category_alias
    }
}

########## SEO COLUMNS ##########
lib.seoColumns = COA
lib.seoColumns {
    10 < lib.productContent
    10.stdWrap.override.cObject < lib.categoryContent

    # 10.stdWrap.override.if    <-- IF WHAT ?

    wrap = <seoColumns><![CDATA[|]]></seoColumns>
}

反之亦然,因为仅当覆盖对象中至少有某些内容时,override 才会执行实际的覆盖。

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

########## SEO COLUMNS ##########
lib.seoColumns = COA
lib.seoColumns {
  10 < lib.categoryContent
  10.stdWrap.override.cObject < lib.productContent
  wrap = <seoColumns><![CDATA[|]]></seoColumns>
}

不需要如果需要。

最简单的方法是使用 stdWrap .ifEmpty 函数 https://docs.typo3.org/typo3cms/TyposcriptReference/Functions/Stdwrap/Index.html#ifempty

lib.seoColumns = COA
lib.seoColumns {
   10. < lib.productContent
   10.stdWrap.ifEmpty.cObject < lib.categoryContent
   wrap = <seoColumns><![CDATA[|]]></seoColumns>
}

因为 ifEmpty 是 string/stdWrap 类型,它支持 stdWrap 属性,我们可以使用 .cObject 加载另一个内容对象。就像第二种情况的 COA。