Gridelements 数据处理:将参数传递给扩展(ctype = 列表)
Gridelements dataprocessing: Pass arguments to extension (ctype = list)
将 gridelements 与数据处理一起使用适用于所有默认内容元素。
但是,如果我包含我自己的扩展之一,控制器的参数就会丢失。因此内容元素呈现,但使用默认操作(列表)和默认模板。
为了重现,我使用了众所周知的新闻扩展:
静态包括(模板):
- 新闻
- gridelements
- my_site_package
网格渲染定义("my_site_package"的一部分):
mySitePackage.gridelements.defaultGridSetup < lib.gridelements.defaultGridSetup
mySitePackage.gridelements.defaultGridSetup {
templateName.field = tx_gridelements_backend_layout
templateName.ifEmpty = default
layoutRootPaths {
10 = EXT:gridelements/Resources/Private/Layouts/
20 = EXT:my_site_package/Resources/Private/Layouts/Gridelements/
}
partialRootPaths {
10 = EXT:gridelements/Resources/Private/Partials/
20 = EXT:my_site_package/Resources/Private/Partials/Gridelements/
}
templateRootPaths {
10 = EXT:gridelements/Resources/Private/Templates/
20 = EXT:my_site_package/Resources/Private/Templates/Gridelements/
}
dataProcessing {
10 = GridElementsTeam\Gridelements\DataProcessing\GridChildrenProcessor
10 {
default {
as = children
}
}
}
}
流体渲染("my_site_package" 的一部分):
<f:for each="{children}" as="row" key="rowNumber">
<f:for each="{row}" as="column" key="columnNumber">
<f:for each="{column}" as="child">
<f:cObject typoscriptObjectPath="tt_content.{child.data.CType}" data="{child.data}" table="tt_content" />
</f:for>
</f:for>
</f:for>
插件集成(后端):
- 控制器动作:显示
前端结果,如果不放在网格元素中:
- 新闻插件正确呈现并调用 showAction
前端结果,如果放在网格元素中:
- 新闻插件已呈现,但回退到默认列表操作。 "my_site_package" 中的模板设置也会被忽略。使用默认新闻模板。
我是不是遗漏了什么或者这是一个错误?
这不是错误,而是您必须自己实现的前端模板中缺少的功能。
Gridelements 仅提供了一些开箱即用的核心元素示例模板。一旦涉及任何插件特定数据,您将必须提供该数据,因为 Gridelements 无法知道您将使用哪个插件以及您要提供哪些参数。
只需在您的网站包设置中注册您自己的模板、部分和布局,这样 Gridelements 就可以在回退到自己的文件之前使用它们。
刚刚又看了一遍这个问题,解决方案实际上可能是别的:
您应该在 Gridelements 配置中禁用 resolveFlexformData,以避免在渲染网格子项时处理 XML 数据。
将 gridelements 与数据处理一起使用适用于所有默认内容元素。 但是,如果我包含我自己的扩展之一,控制器的参数就会丢失。因此内容元素呈现,但使用默认操作(列表)和默认模板。
为了重现,我使用了众所周知的新闻扩展:
静态包括(模板):
- 新闻
- gridelements
- my_site_package
网格渲染定义("my_site_package"的一部分):
mySitePackage.gridelements.defaultGridSetup < lib.gridelements.defaultGridSetup
mySitePackage.gridelements.defaultGridSetup {
templateName.field = tx_gridelements_backend_layout
templateName.ifEmpty = default
layoutRootPaths {
10 = EXT:gridelements/Resources/Private/Layouts/
20 = EXT:my_site_package/Resources/Private/Layouts/Gridelements/
}
partialRootPaths {
10 = EXT:gridelements/Resources/Private/Partials/
20 = EXT:my_site_package/Resources/Private/Partials/Gridelements/
}
templateRootPaths {
10 = EXT:gridelements/Resources/Private/Templates/
20 = EXT:my_site_package/Resources/Private/Templates/Gridelements/
}
dataProcessing {
10 = GridElementsTeam\Gridelements\DataProcessing\GridChildrenProcessor
10 {
default {
as = children
}
}
}
}
流体渲染("my_site_package" 的一部分):
<f:for each="{children}" as="row" key="rowNumber">
<f:for each="{row}" as="column" key="columnNumber">
<f:for each="{column}" as="child">
<f:cObject typoscriptObjectPath="tt_content.{child.data.CType}" data="{child.data}" table="tt_content" />
</f:for>
</f:for>
</f:for>
插件集成(后端):
- 控制器动作:显示
前端结果,如果不放在网格元素中:
- 新闻插件正确呈现并调用 showAction
前端结果,如果放在网格元素中:
- 新闻插件已呈现,但回退到默认列表操作。 "my_site_package" 中的模板设置也会被忽略。使用默认新闻模板。
我是不是遗漏了什么或者这是一个错误?
这不是错误,而是您必须自己实现的前端模板中缺少的功能。
Gridelements 仅提供了一些开箱即用的核心元素示例模板。一旦涉及任何插件特定数据,您将必须提供该数据,因为 Gridelements 无法知道您将使用哪个插件以及您要提供哪些参数。
只需在您的网站包设置中注册您自己的模板、部分和布局,这样 Gridelements 就可以在回退到自己的文件之前使用它们。
刚刚又看了一遍这个问题,解决方案实际上可能是别的:
您应该在 Gridelements 配置中禁用 resolveFlexformData,以避免在渲染网格子项时处理 XML 数据。