我有以下配置
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模板分析器,发现了一些我已经解决的错误,但问题仍然存在。
谢谢!
祝你好运
答案 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
语法时,这并不意味着我不知道它...特别是我研究它详情不是一次,这里是结论......
关于效果
自定义条件解决方案更快比使用CASE
和slide
组合更新,因为它不涉及其他数据库查询(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
必须为1
或2
。
您可以尝试使用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
}
}
}
}