使用TYPO3 be_layout,如何正确选择前端模板(性能方面)?

时间:2014-11-23 13:14:39

标签: typo3 typoscript typo3-6.2.x

在我的大多数网站中,我一直在使用以下代码来决定应该将哪个模板应用于内容呈现 - 基于编辑器在be_layout中选择的内容:

page.10 = TEMPLATE
page.10 {
    stdWrap.if {
       value = 1
       isInList.data = levelfield:-1,backend_layout_next_level,slide
       isInList.override.data = TSFE:page|backend_layout
    }
    template = FILE
    template.file = fileadmin/templates/main/tmpl/main.html
    ...
}
page.20 = TEMPLATE
page.20 {
    stdWrap.if {
       value = 2
       isInList.data = levelfield:-1,backend_layout_next_level,slide
       isInList.override.data = TSFE:page|backend_layout
    }
    template = FILE
    template.file = fileadmin/templates/main/tmpl/special.html
    ...
}

这非常有效。

但我原本以为if条件会确保根本不处理不必要的页面对象。直到我通过管理面板调查了一些性能问题:我发现page.的两个(所有)子对象似乎都被呈现 - 即使if条件没有&#39}。适用。

看起来它经常处理,然后根本不显示!因此,当使用多个模板时,页面渲染时间会爆炸。

enter image description here

我能正确理解吗? 这样做的正确,有效的方法是什么? 或者这是一个错误?

2 个答案:

答案 0 :(得分:1)

您可以使用CASE对象,因为文件属性已启用stdWrap:

page = PAGE
page {
    typeNum = 0
    bodyTag = <body>

    10 = FLUIDTEMPLATE
    10 {
        [... skipping some stuff...]
        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 = fileadmin/Templates/layoutA.html

            2 = TEXT
            2.value = fileadmin/Templates/layoutB.html

        }
    }
}

答案 1 :(得分:0)

CASE对象没有&#34;行为不端&#34;喜欢&#34; if&#34; stdWrap中的条件。

以下是http://forum.typo3.org/index.php?t=tree&th=207295&goto=723619&#msg_723619适用于我的解决方案:将CASE向上应用一级:

page.10 = CASE
page.10 {
    key.data = levelfield:-1,backend_layout_next_level,slide
    key.override.field = backend_layout
    default = TEMPLATE
    default {
        template = FILE
        template.file = fileadmin/templates/main/tmpl/main.html
        marks {     
                LANG < temp.language
                BASEURL < temp.baseurl
                # ... more marks
        }
    }
    # If BE Layout 1 (Standard page) - corresponds to be_layout uid
    # could be omitted, only for beauty
    1 < .default
    # If BE Layout 2 (Landingpage) - corresponds to be_layout uid
    2 < .default
    2 {
        template.file = fileadmin/templates/main/tmpl/main.html
        marks {
                MAINCONTENT < temp.teaser
                CONTENT_NAV >
                CONTENT_NAV =
        }
    }
}

当然,这可以/也应该与流体模板一起使用

从使用4个不同be_layouts的网站,这里是渲染时间 - 在引入CASE之前和之后:

enter image description here