---
title: "Breaking: Site sets and static templates have been restructured"
manual: "Academic StudyPlan"
version: "main"
source: "Changelog/2.4/Breaking-SiteSetsAndStaticTemplatesRestructured.rst"
rendered: "2026-10-02T15:38:26+00:00"
---

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

## Description {#description}

This extension already shipped both delivery mechanisms, and it already hid its
content element by default — it is the only academic extension that did. What it
shipped them through were four one-line `@import` files around two
real ones:

-   `Configuration/TypoScript/Default/setup.typoscript` and
    `Configuration/Sets/AcademicStudyPlan/setup.typoscript` both imported
    `Configuration/TypoScript/Includes/ContentElement.typoscript`.
-   `Configuration/TSconfig/Default.tsconfig` and
    `Configuration/Sets/AcademicStudyPlan/page.tsconfig` both imported
    `Configuration/TSconfig/Includes/academic-study-plan.tsconfig`.

The indirection is gone, apart from the deprecated path of version 2.3, see
[Deprecation: The static template path of version 2.3](Deprecation-LegacyStaticTemplatePath.html#deprecation-legacy-static-template-path). Both mechanisms now read one
physical copy of every file, and both of them deliver the extension per
component:

-   `Configuration/TypoScript/ContentElement/` holds the TypoScript of the
    **Academic Study Plan** content element and is what the static
    template registers *and* what the set points its `typoscript` key at.
-   `Configuration/TSconfig/ContentElement/page.tsconfig` holds its page
    TSconfig 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.

Three things changed beyond the paths:

-   The three Fluid root paths of the content element are **constants** now,
    `plugin.tx_academicstudyplan.view.templateRootPath`,
    `…partialRootPath` and `…layoutRootPath`. They were
    assigned in the setup directly and could only be changed by overriding the
    content element object. The shipped values are unchanged, and the new
    `constants.typoscript` is delivered by both mechanisms together with
    the setup.
-   The wizard entry of the content element is registered unconditionally. It
    used to sit in a `[typo3.branch == "12.4"]` condition, which
    never matched on a version this release supports.
-   The published set `fgtclb/academic-study-plan-default` is an alias
    without payload now. It depends on the new aggregate
    `fgtclb/academic-study-plan`, which depends on the component set
    `fgtclb/academic-study-plan-content-element`.

## Impact {#impact}

A `sys_template` record that selected the old static template keeps its
stored value. The folder of that value holds no TypoScript of its own any more.
It imports the files of the component folder instead, so it delivers what
**All components** delivers — deprecated, until version 4.0, see
[Deprecation: The static template path of version 2.3](Deprecation-LegacyStaticTemplatePath.html#deprecation-legacy-static-template-path).

A page record that selected the old page TSconfig file keeps its stored value
too, and that value now points at a file that does not exist. An unresolved page
TSconfig include is silent, so the content element stops being selectable on
that page tree without any message.

A site package that imported
`Configuration/TypoScript/Default/setup.typoscript` by path keeps getting
the configuration, deprecated in the same way, once it also imports the
`constants.typoscript` that folder holds now. Every other shipped file it
imported by path fails to resolve. `@import` of a missing file is
silent, so this shows up as missing configuration rather than as an error
message.

> [!WARNING]
> Do not open an existing **Academic Study Plan** record 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. This is what the old page
> TSconfig file did, so an installation that stops resolving it is exposed to
> exactly this.

## Affected Installations {#affected-installations}

Installations that select the static template or the page TSconfig file of this
extension, that depend on its site set, or that import one of the shipped files
from an own site package.

## Migration {#migration}

Replace the static template entry in the `sys_template` record:

| Old entry | New entry |
| --- | --- |
| **Academic StudyPlan (Default) (academic_study_plan)**, stored as `EXT:academic_study_plan/Configuration/TypoScript/Default` | **Academic Study Plan: All components (academic_study_plan)**, stored as `EXT:academic_study_plan/Configuration/TypoScript/Full` — or **Academic Study Plan: Content element (academic_study_plan)**, stored as `EXT:academic_study_plan/Configuration/TypoScript/ContentElement` |

Replace the page TSconfig entry in the page record of the site root, tab
**Resources**, field **Page TSconfig**:

| Old entry | New entry |
| --- | --- |
| **Academic StudyPlan (Default) (academic_study_plan)**, stored as `EXT:academic_study_plan/Configuration/TSconfig/Default.tsconfig` | **Academic Study Plan: All components (academic_study_plan)**, stored as `EXT:academic_study_plan/Configuration/TSconfig/Full/page.tsconfig` — or **Academic Study Plan: Content element (academic_study_plan)**, stored as `EXT:academic_study_plan/Configuration/TSconfig/ContentElement/page.tsconfig` |

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

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

| Old path | New path |
| --- | --- |
| `EXT:academic_study_plan/Configuration/TypoScript/Default/setup.typoscript` | `EXT:academic_study_plan/Configuration/TypoScript/ContentElement/setup.typoscript` |
| `EXT:academic_study_plan/Configuration/TypoScript/Includes/ContentElement.typoscript` | `EXT:academic_study_plan/Configuration/TypoScript/ContentElement/setup.typoscript`, together with `EXT:academic_study_plan/Configuration/TypoScript/ContentElement/constants.typoscript` in the constants of the same template |
| `EXT:academic_study_plan/Configuration/TSconfig/Default.tsconfig` | `EXT:academic_study_plan/Configuration/TSconfig/ContentElement/page.tsconfig` |
| `EXT:academic_study_plan/Configuration/TSconfig/Includes/academic-study-plan.tsconfig` | `EXT:academic_study_plan/Configuration/TSconfig/ContentElement/page.tsconfig` |

A site configuration may name the new sets instead of the published one:

| Set | Delivers |
| --- | --- |
| `fgtclb/academic-study-plan-default` | Unchanged in name and in what it delivers, now an alias of the aggregate below. |
| `fgtclb/academic-study-plan` | Everything this extension ships. |
| `fgtclb/academic-study-plan-content-element` | The **Academic Study Plan** content element only. |
