我想根据页面的后端布局更改元素的呈现方式。 根据后端布局更改流体样式内容模板的工作方式如下:
[globalVar = TSFE:page|backend_layout = 1][globalVar = TSFE:page|backend_layout = 2]
lib.fluidContent.templateRootPaths.10 = EXT:ds_res/Resources/Private/Templates/ContentTemplates/
[global]
如果是1或2,则使用其他模板。
但是,这仅在BE布局直接设置在页面上而不是从其父级继承时才有效。 如何解决这个问题?
运行TYPO3 7.6.15 谢谢。
在TYPO3 7.5“后端布局”中 - 条件已在Typoscript中使用“pagelayout”进行了简化。例:
page.10 = FLUIDTEMPLATE
page.10 {
file.stdWrap.cObject = CASE
file.stdWrap.cObject {
key.data = pagelayout
default = TEXT
default.value = EXT:sitepackage/Resources/Private/Templates/Home.html
3 = TEXT
3.value = EXT:sitepackage/Resources/Private/Templates/1-col.html
4 = TEXT
4.value = EXT:sitepackage/Resources/Private/Templates/2-col.html
}
}
代替:
field = backend_layout
ifEmpty.data = levelfield:-2,backend_layout_next_level,slide
ifEmpty.ifEmpty = default
也许这也适用于你的条件:
[globalVar = TSFE:page|pagelayout = 1]
但是,您不应使用[xy] -conditions更改已使用的模板文件,而是更喜欢使用上面示例中显示的CASE。顺便说一句,每个数字都是backend_layout
的UID。
我们使用此解决方案
page = PAGE
page.10 = FLUIDTEMPLATE
page.10 {
templateName = TEXT
templateName.stdWrap {
cObject = TEXT
cObject {
data = levelfield:-2,backend_layout_next_level,slide
override.field = backend_layout
split {
token = pagets__
1.current = 1
1.wrap = |
}
}
ifEmpty = Index
}
layoutRootPaths {
10 = EXT:yourext/Resources/Private/Layouts
}
partialRootPaths {
10 = EXT:yourext/Resources/Private/Partials
}
templateRootPaths {
10 = EXT:yourext/Resources/Private/Templates
}
}
这种方法是当你没有DB中的Backendlayouts(通过后端制作)但是从文件中包含它们时。因为没有uid然后你去了templatename。
示例:如果您使用此PageTS:
mod.web_layout.BackendLayouts {
Blankpage {
title = Blankpage
name = Blankpage
icon = EXT:yourext/Resources/Public/Icons/BackendLayouts/Blankpage.jpg
config {
backend_layout {
colCount = 1
rowCount = 2
rows {
1 {
columns {
1 {
name = Nameofthecolumn
colPos = 0
colspan = 1
}
}
}
2 {
columns {
1 {
name = Nameofthesecondcolumn
colPos = 1
colspan = 1
}
}
}
}
}
}
}
您需要在TEXT-Templates中使用名为Blank Page.html的Template.html。
因此,您可以添加更多模板和Backendlayouts,而无需再次触摸TS。只需添加PageTS和html模板即可。
有一个功能可以避免重复使用该代码
page.10 = FLUIDTEMPLATE
page.10 {
templateName = TEXT
templateName.stdWrap.cObject = CASE
templateName.stdWrap.cObject {
key.data = pagelayout
....
由于您无法在条件中处理继承的布局,因此需要使用typoscript。我的解决方案是:
page.10 = FLUIDTEMPLATE
page.10 {
templateRootPaths.1 = {$resDir}/Private/Templates
partialRootPaths.1 = {$resDir}/Private/Partials
layoutRootPaths.1 = {$resDir}/Private/Layouts
templateName = TEXT
templateName.cObject = CASE
templateName.cObject {
key.data = levelfield:-1, backend_layout_next_level, slide
key.override.field = backend_layout
#Default Template
default = TEXT
default.value = subpage
# homepage
pagets__homepage = TEXT
pagets__homepage.value = homepage
pagets__subpage = TEXT
pagets__subpage.value = subpage
}
variables {
:
pageLayout = TEXT
pageLayout.data = levelfield:-1, backend_layout_next_level, slide
pageLayout.override.field = backend_layout
:
}
}
避免使用file
来更好地实现..RootPaths。
当我们使用在文件中定义的backendlayouts(包含在pageTSconfig中)以pagets__
开头的键名时,您也可以使用backend_layout记录的数量。
我使用常量{$resDir}
来定义可以轻松改变的资源根。在siteextension中,这可能是:
resDir = EXT:site_project1/Resources
我还使用当前活动的页面布局定义了一个流体变量,以便在模板中进一步区分。
如果你想让qazxsw poi对于每个布局都不同,你需要使用类似于我选择的模板名称的CASE对象来构建cObject。
通常:如果你的变量中有后端布局,所有这些都可以在流体模板中处理:你只需要一个起始模板,它调用一个布局,其中所有对partials的进一步调用由当前布局个性化,如
...RootPaths