在我的大多数网站中,我一直在使用以下代码来决定应该将哪个模板应用于内容呈现 - 基于编辑器在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}。适用。
看起来它经常处理,然后根本不显示!因此,当使用多个模板时,页面渲染时间会爆炸。
我能正确理解吗? 这样做的正确,有效的方法是什么? 或者这是一个错误?
答案 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之前和之后: