我尝试编写一个自定义内容元素,该内容元素应该根据backend_layout或内容元素所包含的页面的继承backend_layout进行呈现。
我的第一次尝试
我的模板中有了theTypoScript片段:
lib.layout = CASE
lib.layout {
key.field = backend_layout
key.ifEmpty.data = levelfield:-1,backend_layout_next_level,slide
1 = TEXT
1.value = START-PAGE-LAYOUT
2 = TEXT
2.value = SINGLE-COLUMN-PAGE-LAYOUT
3 = TEXT
3.value = TWO-COLUMN-PAGE-LAYOUT
default = TEXT
default.value = DEFAULT-OUTPUT
}
如果我尝试在我的插件视图中呈现此内容
<f:cObject typoscriptObjectPath="lib.layout" />
我得到了
DEFAULT-OUTPUT
我希望其他三个中的一个作为输出。
我的第二次尝试
我也试过
plugin.my_contentelement.settings.layout < lib.layout
然后使用ContentObjectRenderer但只获得默认输出。
我的问题
有人为我的问题找到了一个很好的解决方案吗?
PS:我使用TYPO3 6.1.5
答案 0 :(得分:1)
不应该是:
lib.layout = CASE
lib.layout {
此外,您应该使用覆盖替换ifEmpty并以相反的方式执行,因为TSref说:如果此时内容为空(剪裁),则内容将加载“ifEmpty”。零被视为空值!
lib.layout {
key.data = levelfield:-2,backend_layout_next_level,slide
key.override.field = backend_layout
1 = TEXT
1.value = START-PAGE-LAYOUT
2 = TEXT
2.value = SINGLE-COLUMN-PAGE-LAYOUT
3 = TEXT
3.value = TWO-COLUMN-PAGE-LAYOUT
default = TEXT
default.value = DEFAULT-OUTPUT
}
将其明确地设置为“None”具有非零值,因此这应该有效。
答案 1 :(得分:0)
key.field
应该工作,当前数据数组由页面数据填充。我不知道为什么它在你的情况下不起作用所以请尝试使用此代码:
lib.layout = CASE
lib.layout {
key.data = page:backend_layout
key.ifEmpty.data = levelfield:-2,backend_layout_next_level,slide
1 = TEXT
1.value = START-PAGE-LAYOUT
2 = TEXT
2.value = SINGLE-COLUMN-PAGE-LAYOUT
3 = TEXT
3.value = TWO-COLUMN-PAGE-LAYOUT
default = TEXT
default.value = DEFAULT-OUTPUT
}
要使levelfield:-1,backend_layout_next_level,slide
生效,您可能需要在安装配置文件中将backend_layout_next_level
(以及更好backend_layout
)添加到$TYPO3_CONF_VARS['FE']['addRootLineFields']
。