TYPO3 - 如何在网格元素中显示表单?
TYPO3 - How to display form in grid element?
我使用 TYPO3 v10.4.8 扩展 gridelements 和核心表单扩展。我已将表单包含到我在后端创建的网格元素中,但它在前端不可见。这是我的网格模板的一部分:
<f:if condition="{children}">
<f:for each="{children}" as="columns" key="rowNumber">
<div class="row grid-row grid-row-{rowNumber}">
<f:if condition="{columns}">
<f:for each="{columns}" as="column" key="columnNumber">
<div class="col-12 grid-column grid-column-{columnNumber}">
<f:for each="{column}" as="child">
<div class="inner">
<f:cObject typoscriptObjectPath="tt_content.{child.data.CType}" data="{child.data}" table="tt_content" />
</div>
</f:for>
</div>
</f:for>
</f:if>
</div>
</f:for>
</f:if>
我的配置:
lib.gridelements.defaultGridSetup =< lib.contentElement
lib.gridelements.defaultGridSetup {
templateName.field = tx_gridelements_backend_layout
templateName.ifEmpty = GridElement
layoutRootPaths {
10 = EXT:gridelements/Resources/Private/Layouts/
20 = {$page.fluidtemplate.templateRootPath}
}
partialRootPaths {
10 = EXT:gridelements/Resources/Private/Partials/
20 = {$page.fluidtemplate.templateRootPath}
}
templateRootPaths {
10 = EXT:gridelements/Resources/Private/Templates/
20 = {$page.fluidtemplate.templateRootPath}
}
dataProcessing {
10 = GridElementsTeam\Gridelements\DataProcessing\GridChildrenProcessor
10 {
default {
as = children
options {
resolveChildFlexFormData = 0
}
}
}
}
}
核心模块中的Render.html
文件被调用,但是变量formConfiguration
是空的,所以没有表单被渲染。
由于表单元素使用 pi_flexform
字段来 select 表单定义,您必须禁用 Gridelements 的自动 FlexForm 解析器。
默认情况下,带有数据处理的 Gridelements 旨在通过直接访问变量和设置来渲染 FLUID 模板中的所有内容。所以DataProcessor的默认设置是将FlexFormXML数据解析成数组。
要禁用该行为,您可以使用选项
resolveFlexFormData = 0
为容器及其子容器禁用它或
resolveChildFlexFormData = 0
仍然解析容器 FlexForms 但跳过那些子元素。
我使用 TYPO3 v10.4.8 扩展 gridelements 和核心表单扩展。我已将表单包含到我在后端创建的网格元素中,但它在前端不可见。这是我的网格模板的一部分:
<f:if condition="{children}">
<f:for each="{children}" as="columns" key="rowNumber">
<div class="row grid-row grid-row-{rowNumber}">
<f:if condition="{columns}">
<f:for each="{columns}" as="column" key="columnNumber">
<div class="col-12 grid-column grid-column-{columnNumber}">
<f:for each="{column}" as="child">
<div class="inner">
<f:cObject typoscriptObjectPath="tt_content.{child.data.CType}" data="{child.data}" table="tt_content" />
</div>
</f:for>
</div>
</f:for>
</f:if>
</div>
</f:for>
</f:if>
我的配置:
lib.gridelements.defaultGridSetup =< lib.contentElement
lib.gridelements.defaultGridSetup {
templateName.field = tx_gridelements_backend_layout
templateName.ifEmpty = GridElement
layoutRootPaths {
10 = EXT:gridelements/Resources/Private/Layouts/
20 = {$page.fluidtemplate.templateRootPath}
}
partialRootPaths {
10 = EXT:gridelements/Resources/Private/Partials/
20 = {$page.fluidtemplate.templateRootPath}
}
templateRootPaths {
10 = EXT:gridelements/Resources/Private/Templates/
20 = {$page.fluidtemplate.templateRootPath}
}
dataProcessing {
10 = GridElementsTeam\Gridelements\DataProcessing\GridChildrenProcessor
10 {
default {
as = children
options {
resolveChildFlexFormData = 0
}
}
}
}
}
核心模块中的Render.html
文件被调用,但是变量formConfiguration
是空的,所以没有表单被渲染。
由于表单元素使用 pi_flexform
字段来 select 表单定义,您必须禁用 Gridelements 的自动 FlexForm 解析器。
默认情况下,带有数据处理的 Gridelements 旨在通过直接访问变量和设置来渲染 FLUID 模板中的所有内容。所以DataProcessor的默认设置是将FlexFormXML数据解析成数组。
要禁用该行为,您可以使用选项
resolveFlexFormData = 0
为容器及其子容器禁用它或
resolveChildFlexFormData = 0
仍然解析容器 FlexForms 但跳过那些子元素。