Academic Jobs 

Extension key

academic_jobs

Package name

fgtclb/academic-jobs

Version

main

Language

en

Author

FGTCLB

License

This document is published under the Creative Commons BY 4.0 license.

Rendered

Wed, 18 Feb 2026 16:32:31 +0000


This TYPO3 extension allows the entry of external job offers by front-end users in TYPO3 using a form. The job offers can then be checked and published through an approval process.

Records can be created, edit and displayed in the frontend and there are a list- and a detail view for the frontend.


Table of Contents:

What does it do? 

This TYPO3 extension allows the entry of external job offers by front-end users in TYPO3 using a form. The job offers can then be checked and published through an approval process.

Records can be created, edit and displayed in the frontend and there are a list- and a detail view for the frontend.

Jobs can be created using TYPO3 backend accounts and also using the Form in the Frontend. In this case you need to configure a page where the plugin is inserted and a page where the jobs are created.

Lists, tables, tile and detailed views are available for displaying the job offers. The following data is available for job advertisements:

  • Job type: Job, Part-time job, Thesis
  • Job title
  • Type of job offer
  • Job description - Rich text editor
  • Start date
  • Location
  • link
  • Image / Logo
  • Organization
  • Sector
  • Required degree
  • Contractual relationship
  • Alumni recommended
  • Internationals welcome
  • Publication date
  • Expiration date
  • Contact details
    • Your name
    • e-mail address
    • Phone number
    • Additional information
    • Link / Slug

Installation 

This extension can be installed using the TYPO3 extension manager or by composer.

composer install 'fgtclb/academic-jobs':'^2'
Copied!

Testing 2.x.x extension version in projects (composer mode) 

It is already possible to use and test the 2.x version in composer based instances, which is encouraged and feedback of issues not detected by us (or pull-requests).

Your project should configure minimum-stabilty: dev and prefer-stable to allow requiring each extension but still use stable versions over development versions:

composer config minimum-stability "dev" \
&& composer config "prefer-stable" true
Copied!

and installed with:

composer require \
    'fgtclb/academic-jobs':'2.*.*@dev'
Copied!

General configuration 

...

Overriding templates 

EXT:academic_jobs is using Fluid as template engine.

This documentation won't bring you all information about Fluid but only the most important things you need for using it. You can get more information in the section Fluid templates of the Sitepackage tutorial. A complete reference of Fluid ViewHelpers provided by TYPO3 can be found in the ViewHelper Reference

Change the templates using TypoScript constants 

As any Extbase based extension, you can find the templates in the directory Resources/Private/.

If you want to change a template, copy the desired files to the directory where you store the templates.

We suggest that you use a sitepackage extension. Learn how to Create a sitepackage extension.

# TypoScript constants
plugin.tx_academicjobs {
    view {
        templateRootPath = EXT:mysitepackage/Resources/Private/Extensions/myextension/Templates/
        partialRootPath = EXT:mysitepackage/Resources/Private/Extensions/myextension/Partials/
        layoutRootPath = EXT:mysitepackage/Resources/Private/Extensions/myextension/Layouts/
    }
}
Copied!

Known problems 

Please note that this extension is still in development. Changes to existing code may appear in upcoming versions.

If you run into a bug or a feature that would be helpful, please use the issue tracker.

Breaking: Migrated extbase plugins from list_type to CType 

Description 

TYPO3 v13 deprecated the tt_content sub-type feature, only used for CType=list sub-typing also known as list_type and mostly used based on old times for extbase based plugins. It has been possible since the very beginning to register Extbase Plugins directly as CType instead of CType=list sub-type, which has now done.

Technically this is a breaking change, and instances upgrading from 1.x version of the plugin needs to update corresponding tt_content records in the database and eventually adopt addition, adjustments or overrides requiring to use the correct CType.

Impact 

The change relates to following plugins:

  • academicjobs_newjobform
  • academicjobs_list
  • academicjobs_detail

Affected Installations 

All installations using the above listed plugins prior V2.1.

Migration 

A TYPO3 UpgradeWizard academicJobs_pluginUpgradeWizard is provided to migrate plugins from CType=list to dedicated CTypes matching the new registration.

Breaking: Removed ImageUploadConverter 

Description 

Custom ImageUploadConverter implementation is removed in favour of the shared EXT:academic_base/Classes/Extbase/Property/TypeConverter/FileUploadConterter. The dropped implementation is considerable an internal implementation, but was never flagged internal and is therefore mentioned as breaking and added to the semver breaking exemption.

Impact 

The change relates usages of the ImageUploadConverter implementation.

Affected Installations 

All installations using the ImageUploadConverter.

Migration 

Use the shared \FGTCLB\AcademicBase\Extbase\Property\TypeConverter\FileUploadConverter provided by EXT:academic_base.

Breaking: Removed tx_academicjobs_domain_model_contact 

Description 

As the relation between database tables tx_academicjobs_domain_model_job and tx_academicjobs_domain_model_contact is 1:1 and there is no reuse of contact records, it does not make sense to have a separate table and record for these contacts. Therefore the relation was resolved and an upgrade wizard handles the migration to the new fields in the tx_academicjobs_domain_model_job.

Impact 

The change relates all records of type tx_academicjobs_domain_model_contact.

Affected Installations 

All installations using the database table tx_academicjobs_domain_model_contact.

Migration 

A TYPO3 UpgradeWizard academicJobs_contactRelation is provided to migrate contact records from relation to fields directly in the job record.

Feature: Dispatch ModifyTcaSelectFieldItemsEvent in TypeItems and EmploymentTypeItems 

Description 

Following provided itemsProcFunc handlers now dispatches the new PSR-14 \FGTCLB\AcademicBase\Event\ModifyTcaSelectFieldItemsEvent:

  • \FGTCLB\AcademicJobs\Backend\FormEngine\EmploymentTypeItems
  • \FGTCLB\AcademicJobs\Backend\FormEngine\TypeItems

Impact 

This allows projects to modify the available select items for the backend (FormEngine) and also for the frontend using a PSR-14 event listener:

EXT:my_ext/Classes/EventListener/ModifyJobTypeItemsListener.php
<?php

declare(strict_types=1);

namespace MyVendor\MyExt\EventListener;

use FGTCLB\AcademicBase\Event\ModifyTcaSelectFieldItemsEvent;
use FGTCLB\AcademicJobs\Domain\Model\JobType;

final class ModifyJobTypeItemsListener
{
    public function __invoke(ModifyTcaSelectFieldItemsEvent $event): void
    {
        if ($event->getFieldName() === 'type') {
            $items = $event->getItems();
            $items[] = [
                'Custom Type',
                JobType::CUSTOM_TYPE,
            ];
            $event->setItems($items);
        }
    }
}
Copied!

Feature: Introduce ModifyJobControllerNewActionViewEvent in JobController::newAction() 

Description 

JobController::newAction() dispatches now the newly introduced PSR-14 event \FGTCLB\AcademicJobs\Event\ModifyJobControllerNewActionViewEvent providing following methods:

  • function getPluginControllerActionContext(): PluginControllerActionAcontext to extbase controller action plugin context data, which can be used to make decisions using the event.
  • function getView(): FluidViewInterface|CoreViewInterface to retrieve the view instance, which can be used to assign additional data, but disallowing to replace the instance.

Impact 

Implementing a event listener for this event allows attaching additional variables to the view for the JobController::newAction(), for example to provide additional select field options in case fields are changed, from text to a select field for example and avoid the need to implement a custom ViewHelper to retrieve the "select options" within the modified views.

Example event listener 

EXT:my_ext/Classes/EventListener/ModifyJobControllerNewActionViewListener.php
<?php

declare(strict_types=1);

namespace MyVendor\MyExt\EventListener;

use FGTCLB\AcademicJobs\Event\ModifyJobControllerNewActionViewEvent;
use TYPO3\CMS\Fluid\View\FluidViewInterface;

final class ModifyJobControllerNewActionViewListener
{
    public function __invoke(ModifyJobControllerNewActionViewEvent $event): void
    {
        $view = $event->getView();
        if ($view instanceof FluidViewInterface) {
            // Assign additional variable to the view
            $view->assign('myCustomVariable', 'My Custom Value');
        }
    }
}
Copied!