0

我尝试编写一个自定义内容元素,该元素应根据包含内容元素的页面的 backend_layout 或继承的 backend_layout 呈现。

我的第一次尝试

我的模板中有 TypoScript 片段:

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

4

2 回答 2

1

不应该是:

lib.layout = CASE
lib.layout {

此外,您应该将 ifEmpty 替换为 override 并以相反的方式执行,因为 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
}

将其明确设置为“无”具有非零值,因此这应该可以工作。

于 2013-10-23T11:08:48.613 回答
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']

于 2013-10-23T10:08:23.487 回答