Templates 类型3流体:如何使用<;f:第节>;使布局动态化?

Templates 类型3流体:如何使用<;f:第节>;使布局动态化?,templates,layout,conditional,typo3,fluid,Templates,Layout,Conditional,Typo3,Fluid,我尝试更改布局,该布局根据后端的定义包装每个内容元素。不幸的是,{data}的变量似乎只在元素内部可用。更麻烦的是,条件ViewHelper在之外没有任何效果,两个语句都被执行,只有最后一个语句被应用于渲染。那没用。。。文档在本节中只讨论了ViewHelper。你知道有什么其他方法可以达到这个目的吗?提前谢谢 <html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" data-namespace-typo3-fluid=

我尝试更改布局,该布局根据后端的定义包装每个内容元素。不幸的是,
{data}
的变量似乎只在
元素内部可用。更麻烦的是,
条件ViewHelper在
之外没有任何效果,两个
语句都被执行,只有最后一个语句被应用于渲染。那没用。。。文档在本节中只讨论了ViewHelper。你知道有什么其他方法可以达到这个目的吗?提前谢谢

<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" data-namespace-typo3-fluid="true">

<f:if condition="{data.layout} == 101"><!-- if-condition has no effect here -->
  <f:then>
    <f:layout name="FullWidth" />
  </f:then>
  <f:else>
    <f:layout name="Default" />
  </f:else>
</f:if>

<f:debug>TEST1: {data.layout}</f:debug><!-- THIS DOES NOT SHOW UP AT ALL! -->

<f:section name="Main">
  <f:debug>TEST2: {data.layout}</f:debug><!-- Output is TEST2: 101 (integer) -->
  [...]
</f:section>

</html>

TEST1:{data.layout}
TEST2:{data.layout}
[...]

读取
f:layout
标记时不呈现模板,因此围绕它的if语句将不起作用。但是,
f:layout
标记的名称作为模板呈现,因此可以使用内联if语句,如下所示:

<f:layout name="{f:if(condition: '{data.layout} == 101', then: 'FullWidth', else: 'Default')}" />

尝试将条件移动到TS中,并使用布局名称的设置

打字稿

lib.layout = TEXT
lib.layout.value = Page
[globalVar = GP:print = 1]
lib.layout.value = Print
[global]
模板

<f:layout name="{f:cObject(typoscriptObjectPath: 'lib.layout')}" />


我就是这样做的。

另一个选项是使用
data.layout的值来构建布局的名称。通过这种方式,它类似于内联f:if viewhelper

<f:layout name="layout{data.layout}" />

另一种方法是评估布局文件中的布局。根据布局值,您可以呈现构建完整模板的特定节或部分。
在这里,您可以选择使用布局值inline来决定截面/局部

<f:render partial="page-{page.layout}" />
<f:render section="section-{page.layout} />


非常感谢,这是一个聪明而简单的解决方案!:-)
<f:render partial="page-{page.layout}" />
<f:render section="section-{page.layout} />