TypoScript:如果为空,则覆盖COA

时间:2017-04-20 14:00:59

标签: arrays object typo3 override typoscript

我有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>
}

2 个答案:

答案 0 :(得分:2)

反过来说,因为当覆盖对象中至少存在某些内容时,覆盖只会执行实际覆盖。

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>
}

如果必要。

答案 1 :(得分:2)

最简单的方法是使用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加载另一个Content Object。就像第二个案件的COA一样。