typoscript backend_layout_next_level无效

时间:2015-10-29 13:08:24

标签: typo3 typoscript

我有以下配置

page = PAGE
page {
    typeNum = 0
    10 = FLUIDTEMPLATE
    10 {
        templateRootPath = EXT:folder/Resources/Private/Website/Templates/
        partialRootPath = EXT:folder/Resources/Private/Website/Partials/
        layoutRootPath = EXT:folder/Resources/Private/Website/Layout/
        file.stdWrap.cObject = CASE
        file.stdWrap.cObject {
            key.data = levelfield:-1, backend_layout_next_level, slide
            key.override.field = backend_layout

            default = TEXT
            default.value = whatever.html

            1 < .default

            2 = TEXT
            2.value = whatever-else.html
    }
}

以某种方式&#39; backend_layout_next_level&#39;不管用;它没有滑下树。因此,我必须为每个页面设置一个backend_layout,这不是人们应该期待的。

有没有办法知道/调试/找出造成这种情况的原因?我认为这可能是因为我的错别字中的花括号出现在错误的位置(太早,太晚或者只是错误)。因此,我查看了Typoscript模板分析器,发现了一些我已经解决的错误,但问题仍然存在。

谢谢!

祝你好运

3 个答案:

答案 0 :(得分:0)

TBH我从来不理解这个 @ ^ $#% CASE语法...因此,绝对更喜欢完美的常用条件,你必须添加自定义条件,如I showed in other post ,所以你可以使用它:

page {
    typeNum = 0
    10 = FLUIDTEMPLATE
    10 {
        templateRootPath = EXT:folder/Resources/Private/Website/Templates/
        partialRootPath = EXT:folder/Resources/Private/Website/Partials/
        layoutRootPath = EXT:folder/Resources/Private/Website/Layout/
        file = whatever.html
    }
}

[userFunc = user_beLayout(2)]
    page.10.file = whatever-else.html
[userFunc = user_beLayout(3)]
    page.10.file = yet-other.html
[userFunc = user_beLayout(4)]
    page.10.file = etc.html
[end]

编辑 - 满足一些评论

注意:当我说我不理解CASE语法时,这并不意味着我不知道它...特别是我研究它详情不是一次,这里是结论......

关于效果

自定义条件解决方案更快比使用CASEslide组合更新,因为它不涉及其他数据库查询(slide确实如此),它迭代已经收集的$GLOBALS['TSFE']->page数组,并尽快停止进一步检查,因此它比slide更便宜,如果它在TS中找到slide则进行额外的查询(不是{39}} ;无论是否需要) - (examine the code for slide mechanics),所以实际条件是性能保护而不是杀手:)

更多

使用条件块你可以一次改变多个元素的行为(而不是为每个元素写单独的CASE),即:

[userFunc = user_beLayout(2)]
    page.10.file = whatever-else.html
    lib.genericMenu >
    config.absRefPrefix = /layout-specific-abs/
    // etc...
[end]

使用CASE语法,您需要为每个元素重复所有这些检查...(其中DRY?)

<强>最后

两种解决方案都是......可以使用,特别是在使用缓存页面时(它们之间的差异大约是十几岁,或者可能是在几百毫秒的情况下 - 条件会更快),对于未缓存的页面,最有可能是个好主意在这两种情况下,直接为每个be_layout记录设置pages

答案 1 :(得分:0)

您使用必须将文件的完整路径作为.file属性中的值提供,或者您应该使用.templateName而只提供模板的名称(区分大小写!!!)没有后缀的文件。

@see https://docs.typo3.org/typo3cms/TyposcriptReference/ContentObjects/Fluidtemplate/Index.html

请注意,在您当前的设置中,模板记录的uid必须为12

您可以尝试使用levelfield: -2代替levelfield: -1

答案 2 :(得分:0)

很久以前,你可能已经解决了你的问题,但这是一种有效的方法:

page = PAGE
page {
    10 = FLUIDTEMPLATE
    10 {
        # select different html files for layouts - ref: backend_layout
        file.stdWrap.cObject = TEXT
        file.stdWrap.cObject {
            data = levelfield:-2,backend_layout_next_level,slide
            override.field = backend_layout
            split {
                token = pagets__
                1.current = 1
                1.wrap = |
            }
            wrap = EXT:folder/Resources/Private/Templates/|.html
        }
        layoutRootPath = EXT:folder/Resources/Private/Layouts/
        partialRootPath = EXT:folder/Resources/Private/Partials/
    }
}

或者您可以将其作为变量传递:

page = PAGE
page {
    10 = FLUIDTEMPLATE
    10 {
        file = EXT:folder/Resources/Private/Templates/Main.html
        layoutRootPath = EXT:folder/Resources/Private/Layouts/
        partialRootPath = EXT:folder/Resources/Private/Partials/
        variables {

        # BE_Layout
        BE_Layout = COA
        BE_Layout {
            stdWrap.cObject = TEXT
            stdWrap.cObject {
                data = levelfield:-2,backend_layout_next_level,slide
                override.field = backend_layout
                split {
                    token = pagets__
                    1.current = 1
                    1.wrap = |
                }
                wrap = |.html
            }
        }
    }
}