TYPO3 gridelements:外观布局未正确显示

TYPO3 gridelements: appearance layout not showing correctly

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

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

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

    default = TEXT
    default.value = |

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

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

一旦我尝试在 gridelement 中使用它,就不会呈现附加包装。如何让 stdWrap 在 Gridelements 中通过?

我的 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 包裹在 children 周围。但这似乎有点混乱和复杂。

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

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

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

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

通过这种方式,您可以保持代码精简以及布局和内容呈现分离,这接近于 TypoScript“包装”的原则。