---
title: "Breaking: Site sets and static templates have been restructured"
manual: "Academic Partners"
version: "3.0"
permalink: "https://docs.typo3.org/permalink/fgtclb/academic-partners:breaking-site-sets-and-static-templates-restructured@3.0"
source: "Changelog/2.4/Breaking-SiteSetsAndStaticTemplatesRestructured.rst"
rendered: "2026-10-26T17:55:16+00:00"
---

# Breaking: Site sets and static templates have been restructured {#breaking-site-sets-and-static-templates-restructured}

## Description {#description}

The TypoScript and the page TSconfig of this extension were shipped twice: the
static template read `Configuration/TypoScript/`, and the site set
`fgtclb/academic-partners` shipped its own `constants.typoscript`
and `setup.typoscript`, each of them a single `@import` of
that folder. The page TSconfig existed only as the wizard file
`Configuration/TsConfig/Wizards/NewContentElement.tsconfig` and was not
selectable on a page at all.

Both mechanisms now read one physical copy of every file, and both of them
deliver the extension per component instead of as one block:

-   `Configuration/TypoScript/` keeps the shared
    `plugin.tx_academicpartners` block and the `page`
    object of the page type. All four content elements are driven by the one
    plugin, so that block is shipped once and every component folder names it in
    a one-line `include_static_file.txt`.
-   `Configuration/TypoScript/List/`,
    `Configuration/TypoScript/Map/`,
    `Configuration/TypoScript/PartnershipsList/` and
    `Configuration/TypoScript/PartnershipsTeaser/` are the four component
    folders. They are what the static template registers *and* what the matching
    set points its `typoscript` key at.
-   `Configuration/TSconfig/<Component>/page.tsconfig` holds the page
    TSconfig of a component and is what the page field **Page TSconfig**
    offers *and* what the set points its `pagets` key at.
-   `Configuration/TypoScript/Full/` and
    `Configuration/TSconfig/Full/page.tsconfig` are the aggregates for
    installations that do not use site sets.

The directory `Configuration/TsConfig/` is now spelled
`Configuration/TSconfig/`, the spelling TYPO3 itself uses for the term.
Every path below it changed with it, and the migration table lists them.

The content elements are now **hidden by default**. The always-included
[`Configuration/page.tsconfig`](https://docs.typo3.org/m/typo3/reference-coreapi/main/en-us/ExtensionArchitecture/FileStructure/Configuration/PageTsconfig.html#file-extension-configuration-page-tsconfig) removes all four content element types from
the selectable ones, and the page TSconfig of a component adds its own back. An
element is therefore offered where it is wanted instead of on every page of
every installation. The TCA registration itself did not move, so the frontend
renders existing records exactly as before. Editing such a record in the backend
needs care. Read the warning below before upgrading.

The `styles.content.getContent` override that
[`Configuration/TypoScript/setup.typoscript`](https://docs.typo3.org/m/typo3/reference-coreapi/main/en-us/ExtensionArchitecture/FileStructure/Configuration/TypoScript/Index.html#file-extension-configuration-typoscriptsetup-typoscript) used to import unconditionally
is a component of its own now,
[`Configuration/TypoScript/ContentLoad/setup.typoscript`](https://docs.typo3.org/m/typo3/reference-coreapi/main/en-us/ExtensionArchitecture/FileStructure/Configuration/TypoScript/Index.html#file-extension-configuration-typoscriptsetup-typoscript). It redefines a
global TypoScript object path for every page of a site, so it must be possible
to take the content elements without it.

The page type **Academic partner** (doktype 40) and its backend layout
**AcademicPartner** are unchanged and stay installation-wide. They are
values stored on `pages` records and are not, and must not be, part of any
opt-in set.

## Impact {#impact}

The static template of version 2.3, offered as **Academic Partners Page
Setup**, was registered under the extension key of EXT:academic_programs, see
[Important: The static template and the backend layout are registered correctly](https://docs.typo3.org/permalink/fgtclb/academic-partners:important-1786968600@3.0). A `sys_template` record that selected it
stores `EXT:academic_programs/Configuration/TypoScript/` and keeps including the
TypoScript of that extension. The update does not rewrite the stored value, so
the TypoScript of this extension is still not included by such a record.

The folder `EXT:academic_partners/Configuration/TypoScript/` is now registered
under the right key and keeps the shared plugin configuration and the page
rendering. What it no longer delivers is the
`styles.content.getContent` override, which moved into a component
of its own.

A site package that imported one of the moved files by path fails to resolve it.
`@import` of a missing file is silent, so this shows up as missing
configuration rather than as an error message.

The four content elements are no longer offered in the backend until the page
TSconfig of their component is included, through the site set or through the
page field **Page TSconfig**.

> [!WARNING]
> Do not open an existing record of one of these content elements in the
> backend form on a page that does not include that page TSconfig. An item
> removed through `TCEFORM.tt_content.CType.removeItems` is
> excluded from the **\[ invalid value \]** fallback TYPO3 otherwise
> adds for a stored value it does not know, and the stored value is dropped
> from the form data as well. The field **Type** therefore comes up
> with nothing selected, and **saving the record writes whatever the browser
> preselected into** `CType`. The record silently becomes another content
> element. The frontend keeps rendering it correctly until that happens.
>
> Include the page TSconfig of the component on every page tree that holds
> such records, and do it before editing them.

> [!WARNING]
> The Fluid template of the page type renders
> `styles.content.getContent` through
> `<f:cObject typoscriptObjectPath="styles.content.getContent"/>`, and
> that ViewHelper throws when the path is undefined. A site that deliberately
> opts out of `fgtclb/academic-partners-content-load` and still uses the page
> type has to define `styles.content.getContent` itself.

The set `fgtclb/academic-partners` keeps its name and keeps delivering
everything, so a site configuration that depends on it needs no change.

Site sets arrived in TYPO3 v13.1 and do nothing at all on TYPO3 v12: the core
has no set API there and the folder `Configuration/Sets/` is never read.
Everything above about the static templates and the page field **Page
TSconfig** therefore applies to both TYPO3 versions this extension supports, and
everything about sets applies to TYPO3 v13 only. An installation on v12 has to
add the page TSconfig entry described under **Migration**, and has no
alternative to it.

## Affected Installations {#affected-installations}

Installations that selected the static template of version 2.3 in a
`sys_template` record, that import one of the shipped files from an own
site package, that use one of the content elements of this extension without
including its page TSconfig, or that relied on the
`styles.content.getContent` override arriving with the plugin
configuration.

## Migration {#migration}

Adjust every `@import` in an own site package:

| Old path | New path |
| --- | --- |
| `EXT:academic_partners/Configuration/TypoScript/constants.typoscript` | Unchanged. |
| `EXT:academic_partners/Configuration/TypoScript/setup.typoscript` | Unchanged, but it no longer imports the `styles.content` override below. |
| `EXT:academic_partners/Configuration/TypoScript/Content/ContentLoad.typoscript` | `EXT:academic_partners/Configuration/TypoScript/ContentLoad/setup.typoscript` |
| `EXT:academic_partners/Configuration/TypoScript/Content/` | `EXT:academic_partners/Configuration/TypoScript/ContentLoad/` |
| `EXT:academic_partners/Configuration/TsConfig/Wizards/NewContentElement.tsconfig` | `EXT:academic_partners/Configuration/TSconfig/Full/page.tsconfig` |
| `EXT:academic_partners/Configuration/TsConfig/Wizards/*.tsconfig` | `EXT:academic_partners/Configuration/TSconfig/Full/page.tsconfig` |
| `EXT:academic_partners/Configuration/TsConfig/BackendLayouts/AcademicPartner.tsconfig` | `EXT:academic_partners/Configuration/TSconfig/BackendLayouts/AcademicPartner.tsconfig` |
| `EXT:academic_partners/Configuration/TsConfig/BackendLayouts/*.tsconfig` | `EXT:academic_partners/Configuration/TSconfig/BackendLayouts/*.tsconfig` |
| `EXT:academic_partners/Configuration/Sets/AcademicPartners/constants.typoscript` | Removed. It was a one-line `@import` of the file above it in this table. |
| `EXT:academic_partners/Configuration/Sets/AcademicPartners/setup.typoscript` | Removed, for the same reason. |

Select the static template of this extension in the `sys_template`
record:

| Old entry | New entry |
| --- | --- |
| **Academic Partners Page Setup (academic_programs)**, stored as `EXT:academic_programs/Configuration/TypoScript/` | **Academic Partners: Shared plugin settings and page rendering (academic_partners)**, stored as `EXT:academic_partners/Configuration/TypoScript/`, or **Academic Partners: All components (academic_partners)**, stored as `EXT:academic_partners/Configuration/TypoScript/Full`, which also carries the content load override. |

The entry of version 2.3 stored the path of EXT:academic_programs. Remove it
unless the site uses EXT:academic_programs on purpose. The entry of that
extension, **Academic Programs Page Setup (academic_programs)** in
version 2.3 and **Academic Programs: Shared plugin settings and page
rendering (academic_programs)** now, stores the same value.

Add the page TSconfig entry, which did not exist before, in the page record of
the site root, tab **Resources**, field **Page TSconfig**:
**Academic Partners: All components (academic_partners)**, stored as
`EXT:academic_partners/Configuration/TSconfig/Full/page.tsconfig`. Without it
the content elements are not selectable any more, and existing records of them
lose their `CType` when they are saved from the backend form.

Sites that use the site set instead need no migration. They must not use both
mechanisms at once, see the **Configuration** chapter.

A site configuration on TYPO3 v13 may name the new component sets instead of
the aggregate:

| Set | Delivers |
| --- | --- |
| `fgtclb/academic-partners` | Unchanged in name, now delivers through the component sets below. |
| `fgtclb/academic-partners-list` | The **Partners List** content element only. |
| `fgtclb/academic-partners-map` | The **Partners Map** content element only. |
| `fgtclb/academic-partners-partnerships-list` | The **Partnerships List** content element only. |
| `fgtclb/academic-partners-partnerships-teaser` | The **Partnerships Teaser** content element only. |
| `fgtclb/academic-partners-content-load` | The `styles.content.getContent` override only. The aggregate depends on it. Name the component sets above without it to opt out. |
