0

在我的大多数网站中,我一直在使用以下代码来决定应该将哪个模板应用于内容呈现 - 基于编辑器选择的内容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条件不适用。

它看起来像是定期处理的,然后根本不显示!所以当使用多个模板时,页面渲染时间会爆炸。

在此处输入图像描述

我是否正确解释了这一点?执行此操作的正确、高效的方法是什么?或者它是一个错误?

4

2 回答 2

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

        }
    }
}
于 2014-11-25T18:20:39.913 回答
0

CASE 对象不像 stdWrap 中的“if”条件那样“行为不端”。

这是来自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 之前和之后:

在此处输入图像描述

于 2014-11-26T10:25:49.037 回答