为页面树定义前端布局

define Frontend Layouts for page trees

我在 TYPO3 7.6-后端使用字段 Frontend-Layout。因为我的网站将在前端有四个不同颜色的不同部门。

所以我正在使用:

TCEFORM {
    pages {
        layout {
            altLabels {
                0 =  [ blue]
                1 =  [ orange ]
                2 =  [ green]
                3 =  [ yellow]
            }
        }
    }

} ### TCEFORM

在我的 FLUIDTEMPLATE 中,我将包装一个 <div>-wrapper,以便在我的样式表中全局设置我的不同语言。 f.e。 div.wrap.blue { background-color:blue;}

<div class="wrap 
{f:if(condition:'{data.layout} == 0',then:'blue')}
{f:if(condition:'{data.layout} == 1',then:'orange')}
{f:if(condition:'{data.layout} == 2',then:'green')}
{f:if(condition:'{data.layout} == 3',then:'yellow')}">
...

这非常适合我。 但是我怎样才能将 frontend-layout-info 从我的父页面滑动(或继承)到我的 pagetree 上的子页面?如果我将新页面添加到页面树中,我不想每次都在页面属性中选择前端布局。这必须自动工作。这可能吗?用 slide?

例如

*ROOT
  + parent blue
    ~~ sub blue 1 /* these pages also have frontend layout 0 */
    ~~ sub blue 2
  + parent orange
    ~~ sub orange 1
  + parent green
    ...
  + parent yellow
  ...

请参考您的意见或提示..

我认为在不操作数据库的情况下递归设置 {data.layout} 布局并不简单。我想到了三个 'solutions' 来解决您的问题:

1) 创建四个后端布局,您可以 select 用于当前页面和子页面。 (基本上冲洗并重复你为第一个后端布局所做的事情)

2) 使用您的布局模式,您可以尝试像这样使用拼写错误设置正文 class(我没有对此进行测试):

page.bodyTag >
page.bodyTagCObject = TEXT
page.bodyTagCObject.field = data.layout
page.bodyTagCObject.wrap = <body class="color-|"> 

3) 使用类似的拼写错误,但使用拼写错误条件更新值,例如 [pidInRootline]

page.bodyTag >
page.bodyTagCObject = TEXT
page.bodyTagCObject.wrap = <body class="blue">

[PIDinRootline = 1]
page.bodyTagCObject.wrap = <body class="orange">
[global]

[PIDinRootline = 2]
page.bodyTagCObject.wrap = <body class="green">
[global]
# and so on

我遇到了同样的问题,这个错字对我来说很好用, 结果就是您想要达到的结果。

如你所见,20.10对象用于在页面上设置前端布局,而20.20对象用于未设置前端布局并采用幻灯片模式:

page {
    bodyTagCObject >
    bodyTagCObject = COA
    bodyTagCObject {
        stdWrap.noTrimWrap = |<body |>|
        20 = COA
        20 {
            wrap = class="|"
            10 = TEXT
            10 {
              if.isTrue.data = page:layout
              data = page:layout
              noTrimWrap = |page-layout-| |
            }
            20 = TEXT
            20 {
             if.isFalse.data = page:layout
             data = levelfield:-2, layout, slide
             noTrimWrap = |page-layout-|
            }
        }
    }
}

希望对您有所帮助。