【问题标题】:TYPO 3 6.1: Change the rendering of a custom content element depending on the backend layoutTYPO 3 6.1:根据后端布局更改自定义内容元素的呈现
【发布时间】:2013-10-23 09:08:17
【问题描述】:

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

我的第一次尝试

我的模板中有 TypoScript sn-p:

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

【问题讨论】:

    标签: typo3 typoscript typo3-6.1.x


    【解决方案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
    }
    

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

    【讨论】:

    • 我认为在这种特殊情况下,两种方法都有效。如果未选择后端布局,则其值自动为0,因此ifEmpty 内容被视为空,并加载更高级别的布局。但是,您的方法应该像我自己使用的那样绝对有效。
    • 顺便说一句,至于CASE,我认为他确实使用了它,否则他可能不会获得默认值。不过还是提一下就好了。
    • 抱歉,我忘记在我的帖子中插入lib.layout = CASE
    • 实际上级别幻灯片必须从 -2 开始,因为 -1 将是当前页面,并且您不想将其“下一级的后端布局”用于页面本身。跨度>
    • 确实如此。很好的一点!为我提出这个建议 +1。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2015-04-27
      • 1970-01-01
      • 2020-05-22
      • 1970-01-01
      • 2019-11-16
      • 2018-10-25
      • 2020-10-30
      • 1970-01-01
      • 2018-06-01
      相关资源
      最近更新 更多