0

我将 TYPO3 10.4 和 Gridelements 与数据处理一起使用。一切正常,除了我放置在 Gridcontainer 中的内容元素的外观/布局选项。

我已经定义了一个TCEFORM.tt_content布局,然后我在我的 Typoscript 中给出了一个自定义类:

tt_content.stdWrap.outerWrap {
  cObject = CASE
  cObject {
    key.field = layout

    default = TEXT
    default.value = |

    1 = TEXT
    1.value = <div class="customClass">|</div>
  }
}

只要我在 gridelements 容器之外使用外观布局,它就可以正常工作,一个“customClass”被包裹在元素周围。

一旦我尝试在网格元素中使用它,额外的包装器就不会呈现。如何在 Gridelements 中通过 stdWrap?

我的 gridelements 配置是

tt_content.gridelements_pi1 {
  templateRootPaths {
      15 = path/to/templates/gridelements/
  }

  dataProcessing {
    10 {
      default {
        options {
            resolveFlexFormData = 1
              resolveChildFlexFormData = 0
          }
      }
    }
  }
}

和模板文件:

<div class="column2 frame-layout-{data.layout} {f:if(condition: data.space_before_class, then: ' frame-space-before-{data.space_before_class}')}{f:if(condition: data.space_after_class, then: ' frame-space-after-{data.space_after_class}')}" id="c{data.uid}">
    <f:if condition="{children}">
        <f:for each="{children.1}" as="column" key="columnNumber">
            <div id="c{data.uid}-{columnNumber}" class="grid-column grid-column-{columnNumber} col-lg-6">
                <f:for each="{column}" as="child">
                    <f:render partial="Child"
                        arguments="{data: child.data, children: child.children, options: options, settings: settings}" />
                </f:for>
            </div>
        </f:for>
    </f:if>
</div>

编辑:我在模板文件中找到了一种使用条件的工作方式:<f:if condition="{child.data.layout} == 1">并根据该方式将 div 与我的 customClass 包裹在孩子周围。但这似乎有点混乱和复杂。

4

1 回答 1

0

您应该将该“包装”放入 Fluid 布局文件中,然后使用部分和布局开关从 Fluid 模板文件中获取其余内容。

通过这种方式,您可以将布局信息放入应该和预期的文件中。

要在不同的布局之间切换,您可以在模板文件中使用动态调用,而不是切换 viewhelper:

<f:layout name="Layout{layout}" />

这样你就可以保持代码精简,布局和内容渲染分离,这接近于 TypoScript“换行”的原则。

于 2022-01-11T09:45:46.457 回答