---
title: "Configuration"
manual: "Academic Profiles"
version: "2.4"
permalink: "https://docs.typo3.org/permalink/fgtclb/academic-persons:configuration@2.4"
source: "Configuration/Index.rst"
rendered: "2026-10-26T16:44:14+00:00"
---

# Configuration {#configuration}

This extension ships its frontend TypoScript and its backend page TSconfig in
two forms: as TYPO3 **site sets**, and as classic **static templates** plus
**page TSconfig files** that are selected on a page. Both forms read the very
same files, so they configure an installation identically.

Pick one of them per site and stay with it — see
[Do not combine both](https://docs.typo3.org/permalink/fgtclb/academic-persons:one-mechanism-per-site@2.4) for what happens otherwise.

> [!NOTE]
> Site sets arrived in TYPO3 v13.1. On **TYPO3 v12 they do not exist**: the
> set definitions this extension ships are never read there, and a
> `dependencies` key in a site configuration is stored and ignored. On
> that version the static templates and the page TSconfig files below are the
> whole mechanism.

## What the sets contain {#configuration-components}

This extension ships six content elements, so it ships six component sets and
one aggregate set that depends on all of them.

All six are driven by one Extbase plugin, so they share one TypoScript block,
`plugin.tx_academicpersons`. That block is shipped once, in
`Configuration/TypoScript/Default/`, and every component includes it.
Which component sets a site names therefore decides which content elements the
backend offers, not how much TypoScript is loaded.

| Set | Delivers |
| --- | --- |
| `fgtclb/academic-persons-list` | The **Persons List** content element. |
| `fgtclb/academic-persons-list-and-detail` | The **Persons List and Detail** content element. |
| `fgtclb/academic-persons-detail` | The **Persons Detail** content element. |
| `fgtclb/academic-persons-card` | The **Profile Card** content element, and the FlexForm restriction that hides the list, sorting and pagination fields for it. |
| `fgtclb/academic-persons-selected-profiles` | The **Profiles: Selected Profiles** content element. |
| `fgtclb/academic-persons-selected-contracts` | The **Profiles: Selected Contracts** content element. |
| `fgtclb/academic-persons` | Everything above. This is the set to use unless you deliberately want a subset. |
| `fgtclb/academic-persons-default` | The name this extension published before the sets were cut per component. It delivers exactly what `fgtclb/academic-persons` delivers, and is kept so that existing site configurations keep working. |
| `fgtclb/academic-persons-standalone` | Everything the aggregate delivers, plus a `page` object that renders content on a plain Bootstrap page. Meant for an installation without a site package of its own — an alternative to `fgtclb/academic-persons`, never an addition to it. |

Every component set depends on `fgtclb/academic-base-ctype-group`, the set of
**EXT:academic_base** that labels the content element group all academic
extensions sort their elements into.

The site settings of this extension — the detail page, and the default grouping,
sorting and pagination of a profile list — are declared with the aggregate set.
A site that depends on a single component set still gets the shipped defaults,
but can only override them in **Site Settings** when it depends on
`fgtclb/academic-persons`.

## Restrict the backend contract selects {#configuration-contract-select-storage-scope}

Two backend fields let an editor pick a contract: the **Contract** of a
page contact record of **EXT:academic_contacts4pages**, and
**Selected contracts** of the **Profiles: Selected Contracts**
content element. Both offer every contract of the installation — in an
installation with more than one site, that is every site's contracts, each
labelled with a person's name.

Page TSconfig restricts a field to the pages the contracts of that page tree are
stored on. Page TSconfig is inherited down the page tree, so each site
configures its own folders on its root page.

The setting is opt-in, and without it nothing changes. Respecting the Extbase
storage page instead is deliberately not done: a page tree without an explicitly
configured storage page would get an empty select and no error.

-   **itemsProcFunc.storagePids**

    -   *Type:* string, a comma-separated list of page uids
    -   *Default:* (empty)

    The pages a contract has to be stored on to be offered. Empty — the default
    — offers every contract of the installation.

-   **itemsProcFunc.recursive**

    -   *Type:* integer
    -   *Default:* 0

    How many levels below each listed page are included. The default `0` uses
    the listed pages themselves. A hidden folder is included as well, because a
    storage folder is regularly hidden.

Set them on the page record of the site root, tab **Resources**, field
**Page TSconfig**. The path of the FlexForm field is the longer one: it
carries the data structure identifier and the sheet, and the dot in the
element's name is escaped.

**Page TSconfig of a site root**

```typoscript
# The "Contract" field of a page contact record.
TCEFORM.tx_academiccontacts4pages_domain_model_contact.contract.itemsProcFunc {
    storagePids = 42,84
    recursive = 1
}

# The "Selected contracts" field of the content element.
TCEFORM.tt_content.pi_flexform.academicpersons_selectedcontracts.sDEF.settings\.selectedContracts.itemsProcFunc {
    storagePids = 42,84
    recursive = 1
}
```

A contract the record already references stays selectable even when it is stored
outside the listed pages. Without that, opening and saving the record would drop
the relation, because a select offers no other source for its value.

The restriction is applied before
`\FGTCLB\AcademicBase\Event\ModifyTcaSelectFieldItemsEvent` is
dispatched, so a listener of that event still has the last word.

## The content elements are hidden by default {#configuration-hidden-by-default}

**EXT:academic_persons** hides all six of its content elements for the
whole installation and brings them back per component. Whichever of the two
mechanisms below you use, it is what makes an element selectable in the backend
again — without one of them the content element is not offered, and existing
records keep rendering.

> [!WARNING]
> This changed in version 2.4. Before it, all six elements were selectable on
> every page of every installation. Read [Breaking: Site sets and static
> templates have been restructured](https://docs.typo3.org/permalink/fgtclb/academic-persons:breaking-site-sets-and-static-templates-restructured@2.4) before upgrading. An
> existing content element on a page that does not enable its component keeps
> its type: the backend shows the stored type followed by
> **(not enabled on this page)**, and saving keeps it. Content
> elements whose type an earlier save already replaced are not repaired, the
> record history shows their former type.

## Include the site set {#site-set}

On TYPO3 v13, add the set to the `config.yaml` of the site that should
offer the content elements:

**config/sites/my-site/config.yaml (diff)**

```diff
 base: 'https://example.com/'
 rootPageId: 1
+dependencies:
+  - fgtclb/academic-persons
```

See also [TYPO3 Explained, Using a site set as dependency in a site](https://docs.typo3.org/m/typo3/reference-coreapi/main/en-us/ApiOverview/SiteHandling/SiteSets/Index.html#site-sets-usage).

## Include static templates {#static-templates}

For an installation that configures its frontend through `sys_template`
records — which on TYPO3 v12 is every installation — the same files are
registered as static templates and as selectable page TSconfig files.

> [!TIP]
> On TYPO3 v13 we recommend the site set — and if you use it, do not
> press the backend button **Create a root TypoScript record** on that
> site. The `sys_template` record it creates carries the flag
> **Clear** for constants and setup, and that flag discards everything
> the site sets contributed. An installation that is already in that state
> gets its configuration back by selecting the static templates below in that
> very record.

### Include static TypoScript {#static-typoscript}

Edit the `sys_template` record of the site root and add the entry to
**Include static (from extensions)**:

| Entry | Delivers |
| --- | --- |
| **Academic Persons: All components (academic_persons)** | Every component this extension ships, in one entry. This is the entry to use. |
| **Academic Persons: Shared plugin settings (academic_persons)** | The shared `plugin.tx_academicpersons` block on its own. This is what installations selected before version 2.4, then named **Academic Persons Settings**. The stored value did not change, so such a record keeps working untouched. |
| **Academic Persons: Standalone page (academic_persons)** | Everything **All components** delivers, plus the `page` object of the standalone flavour. Do not select it on a site that has a site package of its own. |

There is one further entry per component —
**Academic Persons: Profile list**,
**Academic Persons: Profile list and detail**,
**Academic Persons: Profile detail**,
**Academic Persons: Profile card**,
**Academic Persons: Selected profiles** and
**Academic Persons: Selected contracts**. They exist so that the static
mechanism has the same shape as the sets. Because all six components share one
TypoScript block, each of them delivers the same thing, and selecting more than
one of them changes nothing.

### Include static page TSconfig {#static-pagetsconfig}

This is the half that decides which content elements the backend offers. Edit
the page record of the site root, tab **Resources**, field
**Page TSconfig**, and add the entries for the content elements the page
tree should offer:

| Entry | Delivers |
| --- | --- |
| **Academic Persons: All components (academic_persons)** | Every component this extension ships, in one entry. |
| **Academic Persons: Profile list (academic_persons)** | Makes the **Persons List** content element selectable, and configures its entry in the new content element wizard. |
| **Academic Persons: Profile list and detail (academic_persons)** | The same for **Persons List and Detail**. |
| **Academic Persons: Profile detail (academic_persons)** | The same for **Persons Detail**. |
| **Academic Persons: Profile card (academic_persons)** | The same for **Profile Card**, plus the FlexForm restriction of that element. |
| **Academic Persons: Selected profiles (academic_persons)** | The same for **Profiles: Selected Profiles**. |
| **Academic Persons: Selected contracts (academic_persons)** | The same for **Profiles: Selected Contracts**. |

The setting is inherited by every page below the one it is set on.

## Do not combine both {#one-mechanism-per-site}

This applies to TYPO3 v13 only, because v12 has no site sets to combine
anything with. A site that uses the site set **and** the static template reads
the shipped files twice. The site set is applied before the `sys_template` record, so
the second read happens after the site settings and after
`config/sites/<site>/constants.typoscript` — and it resets every constant
the extension ships a default for back to that default.

Nothing else is damaged: the **Constants** and **Setup** fields
of the `sys_template` record, the page TSconfig of a page and the page
TSconfig files selected on a page are all applied afterwards and still win. Use
one mechanism per site and the question does not arise.

-   [General configuration](https://docs.typo3.org/permalink/fgtclb/academic-persons:general-configuration@2.4)
-   [Validation settings](https://docs.typo3.org/permalink/fgtclb/academic-persons:validation-settings@2.4)
-   [Profile cleanup](https://docs.typo3.org/permalink/fgtclb/academic-persons:profile-cleanup@2.4)
-   [Route enhancers](https://docs.typo3.org/permalink/fgtclb/academic-persons:route-enhancers@2.4)
-   [Labels](https://docs.typo3.org/permalink/fgtclb/academic-persons:labels@2.4)
