---
title: "Upgrading from 2.3 to 2.4"
manual: "Academic Bite Jobs"
version: "main"
permalink: "https://docs.typo3.org/permalink/fgtclb/academic-bite-jobs:upgrade-from-2-3-to-2-4@main"
source: "Upgrade/From23To24.rst"
rendered: "2026-10-26T19:20:41+00:00"
---

# Upgrading from 2.3 to 2.4 {#upgrade-from-2-3-to-2-4}

Version 2.4 delivers the configuration of **academic_bite_jobs** per
component, hides its content element until a site enables it and migrates the
stored plugin settings of older job lists with a new upgrade wizard. It changes
no database table of this extension. Work through the sections in order. Skip a
step that does not apply to the installation.

## Before you start {#upgrade-from-2-3-to-2-4-before-you-start}

Version 2.4 runs on TYPO3 12.4 from 12.4.22 on and on TYPO3 13.4, with PHP 8.1
or later. That is the same as for 2.3, so the TYPO3 core does not have to
change for this upgrade.

**academic_bite_jobs** 2.4 needs these packages. Upgrade them first or
in the same deployment, in this order:

-   [`fgtclb/environment-state-manager`](https://packagist.org/packages/fgtclb/environment-state-manager) 1.x, new in 2.4, which
    **academic_base** 2.4 requires. Composer installs it on its own. A
    classic installation installs **environment_state_manager** before
    it activates **academic_base** 2.4.
-   [`fgtclb/academic-base`](https://packagist.org/packages/fgtclb/academic-base) 2.4, the same release as this extension.

The extension now declares the system extension **install** as a
dependency, for its upgrade wizard. TYPO3 keeps that extension active in every
installation, so this needs no action.

## Update the package {#upgrade-from-2-3-to-2-4-package}

```bash
composer require -W \
    'fgtclb/academic-base':'~2.4.0' \
    'fgtclb/academic-bite-jobs':'~2.4.0'
```

A project that requires branch `2` as `2.x-dev` keeps an inline alias such
as `2.x-dev as 2.4.x-dev` working, see [Important: The development branch installs as 2.4.x-dev](https://docs.typo3.org/permalink/fgtclb/academic-bite-jobs:important-1790796660@main).

On a classic installation, install **environment_state_manager** 1.x
from the TER in **Admin Tools > Extensions** first, then update
**academic_base** and **academic_bite_jobs** there, in this
order. Run the commands of this page with `typo3/sysext/core/bin/typo3`
instead of `vendor/bin/typo3`.

```bash
vendor/bin/typo3 cache:flush
```

## Run the upgrade wizards {#upgrade-from-2-3-to-2-4-wizards}

The wizard requires the database comparison of the installation to be applied
first, in **Admin Tools > Maintenance > Analyze Database Structure** or
with `vendor/bin/typo3 extension:setup`. The other academic extensions
add columns in 2.4.

`academicBiteJobs_listViewFlexFormUpgradeWizard`, **Migrate the
plugin settings of academic_bite_jobs job lists stored before 2.1.**, is new. It
rewrites the stored view of every **Bite Jobs List** content element,
hidden ones included, from `ListView`, `CardView` or `TableView`, or an empty
or unknown value, to `List`, `Card` or `Table`. It also removes the settings
`settings.jobs.groupBy` and `settings.jobs.custom.zuordnung`, which version 2.1
dropped from the plugin but left in the stored records. A stored grouping
setting keeps a list grouped by a field the job postings no longer carry until
the wizard has run.

```bash
vendor/bin/typo3 upgrade:run academicBiteJobs_listViewFlexFormUpgradeWizard
```

Content elements created with version 1.x are plugins stored with the content
type `list`. Neither this version nor the wizard renders or migrates
them. See [Important: The job list groups only on request and reads old view values](https://docs.typo3.org/permalink/fgtclb/academic-bite-jobs:important-1789660801@main).

## Adapt the configuration {#upgrade-from-2-3-to-2-4-configuration}

The TypoScript and the page TSconfig are now delivered per content element,
and the **Bite Jobs List** content element is hidden in the whole
installation until the page TSconfig of its component is included. See
[Breaking: Site sets and static templates have been restructured](https://docs.typo3.org/permalink/fgtclb/academic-bite-jobs:breaking-site-sets-and-static-templates-restructured@main).

### Include the components {#upgrade-from-2-3-to-2-4-components}

-   **Site set, TYPO3 13 only.** A site that depends on the set
    `fgtclb/academic-bite-jobs` needs no change. The set keeps its name and now
    brings the page TSconfig along.
-   **Static template.** The stored entry of 2.3 keeps working as
    **Academic Bite Jobs: Path up to 2.3 (deprecated, use All
    components) (academic_bite_jobs)**, which is removed in version 4.0. Replace
    it with **Academic Bite Jobs: All components (academic_bite_jobs)**
    in the field **Include TypoScript sets** on the tab
    **Advanced Options** of the template record, see
    [Deprecation: The static template path of version 2.3](https://docs.typo3.org/permalink/fgtclb/academic-bite-jobs:deprecation-legacy-static-template-path@main).
-   **Page TSconfig.** A site without the site set, which is every site on
    TYPO3 12, adds **Academic Bite Jobs: All components
    (academic_bite_jobs)** in the field **Include static Page TSconfig
    (from extensions)** on the tab **Resources** of its root page, see
    [Include static page TSconfig](https://docs.typo3.org/permalink/fgtclb/academic-bite-jobs:static-pagetsconfig@main). Without it the content element is not offered
    for new content. On TYPO3 12 the same file brings the entry of the new
    content element wizard, which version 2.3 delivered through the site set
    only, so TYPO3 12 never offered it, see [Important: The extension ships page TSconfig for every installation](https://docs.typo3.org/permalink/fgtclb/academic-bite-jobs:important-1787054400@main).
-   Use one of the two mechanisms per site, see
    [Do not combine both](https://docs.typo3.org/permalink/fgtclb/academic-bite-jobs:one-mechanism-per-site@main).

Until the component is included, an existing content element keeps rendering
and keeps its type: **academic_base** 2.4 shows the stored type in the
field **Type** followed by **(not enabled on this page)**, and
saving keeps it. The warning of the changelog entry that saving such a record
rewrites its type describes the state before that fix. A content element that
an older version or a page TSconfig of your own already turned into another type
is not repaired. Correct it by hand from its record history.

### Adjust your own configuration {#upgrade-from-2-3-to-2-4-own-configuration}

-   The page TSconfig directory is `Configuration/TSconfig/` now, and the
    TypoScript moved into `Configuration/TypoScript/List/`. Take the new
    path of every `@import` from the table of
    [Breaking: Site sets and static templates have been restructured](https://docs.typo3.org/permalink/fgtclb/academic-bite-jobs:breaking-site-sets-and-static-templates-restructured@main). An import of a
    missing file fails silently.
-   A site whose content element layout renders no header sets
    `plugin.tx_academicbitejobs.renderContentElementHeader = 1`.
    The plugin no longer renders the header itself, see
    [Important: The job list leaves the content element header to the layout](https://docs.typo3.org/permalink/fgtclb/academic-bite-jobs:important-1790323401@main).
-   The job list is grouped only when TypoScript names a field of the job
    postings in `plugin.tx_academicbitejobs.settings.jobs.groupBy`.
    Set it where a list has to stay grouped, see
    [Grouping the jobs](https://docs.typo3.org/permalink/fgtclb/academic-bite-jobs:configuration-general-group-by@main).
-   Label overrides move from
    `plugin.tx_academic_bite_jobs._LOCAL_LANG` to
    `plugin.tx_academicbitejobs._LOCAL_LANG`, see
    [Important: Label overrides are read from the documented path](https://docs.typo3.org/permalink/fgtclb/academic-bite-jobs:important-label-overrides-use-the-documented-path@main).

## Adapt templates and assets {#upgrade-from-2-3-to-2-4-templates}

Version 2.4 changes these templates and partials. A copy of one of them in a
site package keeps rendering the copy, so compare each copy with the shipped
file and take over the changes. The paths below are relative to
`Resources/Private/`:

| File | What changed | Entry |
| --- | --- | --- |
| `Templates/BiteJobs/List.html` | The header renders only with `settings.renderContentElementHeader`, and the list is grouped only by the field `settings.jobs.groupBy` names. | [Important: The job list leaves the content element header to the layout](https://docs.typo3.org/permalink/fgtclb/academic-bite-jobs:important-1790323401@main), [Important: The job list groups only on request and reads old view values](https://docs.typo3.org/permalink/fgtclb/academic-bite-jobs:important-1789660801@main) |
| `Partials/BiteJobs/View/List.html`, `Partials/BiteJobs/View/Card.html`, `Partials/BiteJobs/View/Table.html` | The translations pass the extension name `AcademicBiteJobs`. | [Important: Label overrides are read from the documented path](https://docs.typo3.org/permalink/fgtclb/academic-bite-jobs:important-label-overrides-use-the-documented-path@main) |

No asset of this extension changed.

## Check the result {#upgrade-from-2-3-to-2-4-check}

-   The **Bite Jobs List** content element is offered for new content
    on the pages that should have it, and existing ones keep their type.
-   Content elements saved with version 2.0 render, and their backend form shows
    the view the frontend renders.
-   Job titles of an ungrouped list moved up one heading level, an
    `<h2>` instead of an `<h3>` for header layout 1. Check the
    styles of the job list, or override `Partials/BiteJobs/Header.html`.
-   The header of the content element appears once.
