---
title: "Breaking: Site sets and static templates have been restructured"
manual: "Academic Jobs"
version: "main"
permalink: "https://docs.typo3.org/permalink/fgtclb/academic-jobs:breaking-site-sets-and-static-templates-restructured@main"
source: "Changelog/2.4/Breaking-SiteSetsAndStaticTemplatesRestructured.rst"
rendered: "2026-10-12T10:12:12+00:00"
---

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

## Description {#description}

The TypoScript of this extension was shipped twice: the static template read
`Configuration/TypoScript/`, and the site set `fgtclb/academic-jobs`
shipped its own `constants.typoscript` and `setup.typoscript`, each
of them a single `@import` of that folder. The page TSconfig was not
selectable on a page at all. It existed only as the three wizard files under
`Configuration/TSConfig/Plugins/`, glob imported into 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).

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/NewJobForm/`,
    `Configuration/TypoScript/List/` and
    `Configuration/TypoScript/Detail/` are what the static templates
    register *and* what the sets point their `typoscript` key at.
-   `Configuration/TSconfig/NewJobForm/page.tsconfig`,
    `Configuration/TSconfig/List/page.tsconfig` and
    `Configuration/TSconfig/Detail/page.tsconfig` hold the page TSconfig
    of a component and are what the page field **Page TSconfig** offers
    *and* what the sets point their `pagets` key at.
-   `Configuration/TypoScript/Full/` and
    `Configuration/TSconfig/Full/page.tsconfig` are the aggregates for
    installations that do not use site sets. On TYPO3 v12 that is every
    installation, because site sets do not exist there.

The directory holding the page TSconfig was renamed from
`Configuration/TSConfig` to `Configuration/TSconfig` in the same
release, see
[Important: The page TSconfig directory is now spelled TSconfig](https://docs.typo3.org/permalink/fgtclb/academic-jobs:important-1787141400@main).

All three content elements are driven by one Extbase plugin and share one
`plugin.tx_academicjobs` block. **That block did not move**: it
stays in `Configuration/TypoScript/`, which is the value every
`sys_template` record that selected the static template of this extension
already stores. Each component folder is a subfolder of it and names it in a
one-line `include_static_file.txt`, so the block exists once and is
delivered by both mechanisms alike.

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
`academicjobs_newjobform`, `academicjobs_list` and
`academicjobs_detail` from the selectable content element types, and
the page TSconfig of a component adds its own element back. An element is
therefore offered where it is wanted instead of on every page of every
installation. The wizard entry of an element moved into the same file, together
with the `show` key that TYPO3 v12 needs to offer it in the new
content element wizard at all, so both arrive with the component instead of with
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.

Four constants changed their shipped default from *empty* to `0`:
`plugin.tx_academicjobs.persistence.storagePid`,
`plugin.tx_academicjobs.detailPid`,
`plugin.tx_academicjobs.listPid` and
`plugin.tx_academicjobs.saveForm.fallbackRedirectPageId`. The site
settings of this extension always declared them as `0`, and a site that
uses both delivery mechanisms had the declared default reset to empty by the
second read. Every consumer of the four reads an empty value and a
`0` as "no page selected", so the change is a reconciliation, not a
behaviour change.

## Impact {#impact}

A `sys_template` record that selected the static template of this extension
keeps its stored value, and that value keeps delivering the shared plugin
configuration. It delivers nothing else, and it never made a content element
selectable.

A site package that imported one of the shipped page TSconfig 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 three content elements are no longer offered in the backend until the page
TSconfig of the component is included, through the site set on TYPO3 v13 or
through the page field **Page TSconfig** on either core version.

> [!WARNING]
> Do not open an existing **Jobs New**, **Jobs List** or
> **Jobs Detail** 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.

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

## Affected Installations {#affected-installations}

Installations that use one of the content elements of this extension without
including its page TSconfig, and installations that import one of the shipped
page TSconfig files from an own site package.

## Migration {#migration}

The static template entry does not have to be replaced. Selecting one of the new
entries instead documents what a site actually uses:

| Old entry | New entry |
| --- | --- |
| **Academic Jobs (academic_jobs)**, stored as `EXT:academic_jobs/Configuration/TypoScript` | **Academic Jobs: All components (academic_jobs)**, stored as `EXT:academic_jobs/Configuration/TypoScript/Full`, or one of **Academic Jobs: Jobs New**, **Academic Jobs: Jobs List**, **Academic Jobs: Jobs Detail**. The old value stays registered as **Academic Jobs: Shared plugin settings (academic_jobs)** and keeps delivering the shared plugin block. |

Add the page TSconfig entry, which did not exist before, in the page record of
the site root, tab **Resources**, field **Page TSconfig**:
**Academic Jobs: All components (academic_jobs)**, stored as
`EXT:academic_jobs/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.

On TYPO3 v12 this is the only way to get them back. Site sets arrived in TYPO3
v13.1, and the set files of this extension are never read on v12.

Sites on TYPO3 v13 that use the site set instead need no migration. 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_jobs/Configuration/TypoScript/constants.typoscript` | unchanged |
| `EXT:academic_jobs/Configuration/TypoScript/setup.typoscript` | unchanged |
| `EXT:academic_jobs/Configuration/TSConfig/page.tsconfig` | `EXT:academic_jobs/Configuration/TSconfig/Full/page.tsconfig` |
| `EXT:academic_jobs/Configuration/TSConfig/Plugins/NewJobsForm.tsconfig` | `EXT:academic_jobs/Configuration/TSconfig/NewJobForm/page.tsconfig` |
| `EXT:academic_jobs/Configuration/TSConfig/Plugins/List.tsconfig` | `EXT:academic_jobs/Configuration/TSconfig/List/page.tsconfig` |
| `EXT:academic_jobs/Configuration/TSConfig/Plugins/Detail.tsconfig` | `EXT:academic_jobs/Configuration/TSconfig/Detail/page.tsconfig` |

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

| Set | Delivers |
| --- | --- |
| `fgtclb/academic-jobs` | Unchanged in name, now delivers through the component sets below. |
| `fgtclb/academic-jobs-new-job-form` | The **Jobs New** content element only. |
| `fgtclb/academic-jobs-list` | The **Jobs List** content element only. |
| `fgtclb/academic-jobs-detail` | The **Jobs Detail** content element only. |
