TYPO3:TypoScript中的后端布局条件

问题描述 投票:0回答:4

我想根据页面的后端布局更改元素的呈现方式。 根据后端布局更改流体样式内容模板的工作方式如下:

[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 condition typoscript
4个回答
6
投票

在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。


1
投票

我们使用此解决方案

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模板即可。


1
投票

有一个功能可以避免重复使用该代码

page.10 = FLUIDTEMPLATE
page.10 {
    templateName = TEXT
    templateName.stdWrap.cObject = CASE
    templateName.stdWrap.cObject {
        key.data = pagelayout
        ....

0
投票

由于您无法在条件中处理继承的布局,因此需要使用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
© www.soinside.com 2019 - 2024. All rights reserved.