TYPO 3 6.1:根据后端布局更改自定义内容元素的呈现

时间:2013-10-23 09:08:18

标签: typo3 typoscript typo3-6.1.x

我尝试编写一个自定义内容元素,该内容元素应该根据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

2 个答案:

答案 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']