网格元素数据处理:将参数传递给扩展(ctype = list)

时间:2019-08-22 12:33:40

标签: typo3 typo3-9.x tx-news typo3-extensions tx-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”的模板设置也将被忽略。使用默认的新闻模板。

我在这里错过了什么吗,或者这是一个错误吗?

2 个答案:

答案 0 :(得分:1)

再次查看该问题,解决方案实际上可能是其他问题:

您应该在Gridelements配置中禁用resolveFlexformData,以避免在呈现网格子级时处理XML数据。

https://gitlab.com/coderscare/gridelements/issues/14

答案 1 :(得分:0)

这不是一个错误,而是您必须自己实现的前端模板中缺少的功能。

Gridelements仅提供一些基本的示例模板,这些模板可以直接使用核心元素。一旦涉及到任何插件特定的数据,您将必须提供该数据,因为Gridelements无法知道您将要使用哪个插件以及要提供哪些参数。

只需在您的站点包设置中注册您自己的模板,部分和布局,以便Gridelements可以在回退到其自己的文件之前使用它们。