TypoScript:如果为空则覆盖 COA
TypoScript: override COA if empty
我有 2 个 COA:lib.productContent
和 lib.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。
我有 2 个 COA:lib.productContent
和 lib.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。