How to wrap custom former CType=list HTML from overriden List.html around all plugins, after the list_type removal?

I have a TYPO3 v11 installation that has a lot of plugins (around 20), custom ones as well as third party ones (like ext:news or ext:solr, and some others). This installation should be upgraded step by step to v14. The installation is not using ext:fluid_styled_content, but instead uses an own contentRenderingTemplates path, but it basically does the same as ext:fluid_styled_content would be doing.

In this process I have to migrate tt_content.list_type to tt_content.CType. The formal process of this is all clear (wizard, permissions, showitem, etc.pp.).

However, in this specific setup, the Fluid template List.html (loaded by CType=list) was overidden to add a lot of general Plugin-wrapping stuff, around <f:cObject typoscriptObjectPath="tt_content.list.20.{data.list_type}" data="{data}" table="tt_content"/>.

With CType=list now vanishing, there is no way to add this custom wrapping anymore, because the plugin templates are loaded directly, without being passed through List.html first anymore:

  • I can not redeclare lib.contentElement = CASE to provide a manual switch to a wrapper-template for the relevant former list types (because Plugin registration hard-coded assumes a FLUIDTEMPLATE).
  • I also did not found any Hooks, Events, Middlewares, etc. that could be used to intercept this process (correct me if I missed one).
  • And because all plugin templates are now loaded directly, I also can not provide a central f:layout.

The only way I can currently think of is to override all templateRootPaths individually of any relevant extension and copy-paste the wrapper into each relevant Controller action template. But this is super unflexible, because all future changes to this wrapper will have to be copy-pasted for all relevant plugin.

In case this matters (for new events, middlewares or whatever): I have to do this plugin migration partially on v12 already (because of ext:news doing the migration then already).

How can I achieve this generic plugin wrapping now?

Hey,

we are using this in Fluid Template “Generic.html”:

<f:cObject typoscriptObjectPath="tt_content.{data.CType}.20" data="{data}" table="tt_content" />

and in TS we set:

lib.contentElement = FLUIDTEMPLATE
lib.contentElement {
    templateName = Default
    templateRootPaths {
        999 = EXT:my_sitepackage/Resources/Private/Templates/Content
    }
}

to use the Generic.html template file which is there. That works in v14 without fluid styled content.

Yes, this is the template for the former PLUGIN_TYPE_CONTENT_ELEMENT plugins, which work just like in your case. But in our case these Plugins did not have any custom wraps around them (on purpose), in contrast to the CType=list ones.

When all the former PLUGIN_TYPE_PLUGINplugins now become PLUGIN_TYPE_CONTENT_ELEMENT, I need to adjust Generic.html, forcing me to to provide a hardcoded list of either the former PLUGIN_TYPE_CONTENT_ELEMENT or the former PLUGIN_TYPE_PLUGIN to be able to switch to the correct layout for each plugin “group” in Generic.html.

I was hoping to find some kind of automatic way, without needing a hardcoded list… But it seems there is none, because the former list plugins just lose the information of being such.