Academic Contacts 4 Pages 

Extension key

academic_contacts4pages

Package name

fgtclb/academic-contacts4pages

Version

main

Language

en

Author

FGTCLB

License

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

Rendered

Fri, 21 Aug 2026 06:15:13 +0000


TYPO3 extension that assigns contact records to pages and displays them in the frontend, for example project managers, research participants or cooperation partners alongside the page content.


Introduction 

What the extension does and the main concepts behind it.

Installation 

Install academic_contacts4pages via Composer, the Extension Manager or a TER upload.

Known problems 

Known issues and information about them.

Changelog 

Learn about what has changed and which actions are required to upgrade.

What does it do? 

This TYPO3 extension assigns people to pages and displays them in the frontend, for example the dean's office of a faculty page, the participants of a research page or the contact persons of a study programme.

A person is not maintained here: the extension builds on EXT:academic_persons and points at one of the contracts of a profile. Everything that is displayed - the name, the position, the location, the email addresses, the phone numbers and the physical addresses - comes from that contract, so a change to the person has to be made once and reaches every page the person is a contact of.

Contact records 

A contact is a record of its own, maintained either in the Contacts tab of a page or in the Linked pages tab of a contract. Both edit the same record, so a person can be added from the page it belongs on as well as from the person itself.

A contact record consists of:

Page
The page the person is a contact of. Filled automatically when the record is created from a page.
Contract
The contract of the person to display. Filled automatically when the record is created from a contract.
Role
An optional role, for example Dean's office or Student advisors. Contacts sharing a role are rendered as a group below the name of that role, contacts without a role are rendered below the grouped ones. Roles are records of their own and are usually kept in a storage folder.

Frontend output 

The contacts of a page are rendered either with the content element Contacts for this page, which can be placed anywhere on the page, or directly in a page template through the data processor \FGTCLB\AcademicContacts4pages\DataProcessing\ContactsProcessor , which adds the contacts and their roles to the page rendering. Both display the person through the Profile/Item partial of EXT:academic_persons, so contacts look like the profiles rendered by that extension.

Installation 

The extension has to be installed like any other TYPO3 CMS extension. You can download and install it using one of the following methods.

Install the stable release
composer require 'fgtclb/academic-contacts4pages':'^2'
Copied!
  1. Switch to the module Admin Tools > Extensions.
  2. Switch to Get Extensions.
  3. Search for the extension key academic_contacts4pages.
  4. Import the extension from the repository.
  1. Get the current version from TER by downloading the ZIP version. Alternatively, get the ZIP from the GitHub Releases page.
  2. Switch to the module Admin Tools > Extensions.
  3. Enable Upload Extension.
  4. Select or drag the extension ZIP archive and upload the file.

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: Removed TYPO3 v12 support 

Description 

Support for TYPO3 v12 has been removed for the 3.x version line, based on the dual TYPO3 core version support per major version of the academic extensions support matrix.

This includes removing build, test and configuration parts only required for TYPO3 v12. Version specific code paths are dropped in a dedicated step.

Impact 

TYPO3 v12 or older instances can no longer install or update to the 3.x version of the academic extensions and are required to upgrade TYPO3 first.

The extension cannot be installed on TYPO3 v12 anymore but does not break otherwise.

Affected installations 

All installations using an academic extension on TYPO3 v12 that want to upgrade to the 3.x version line.

Migration 

Upgrade the TYPO3 installation to a supported version (TYPO3 v13) beforehand or within the same upgrade step.

Important: The page TSconfig directory is now spelled TSconfig 

Description 

The extensions of this set spelled their page TSconfig directory in three different ways — TsConfig, TSconfig and TSConfig. They now all use TSconfig, which is how TYPO3 spells the term and what the core documentation uses.

In this extension the directory was Configuration/TsConfig.

Nothing was broken before, because every import matched the directory it pointed at. The reason to change it is that a filesystem is case sensitive on Linux and case insensitive on macOS and Windows, so a path copied between two of these extensions resolved on one machine and silently not on another — and a page TSconfig @import that does not resolve raises no error, the configuration is simply absent.

Impact 

Every file this extension ships moved with the directory. The imports inside the extension were updated in the same change, so an installation that only installs the extension has nothing to do.

An integrator who references these paths from their own configuration has to update them, because the old path no longer exists:

Page TSconfig of your own site package
# before
@import 'EXT:academic_contacts4pages/Configuration/TsConfig/page.tsconfig'
# after
@import 'EXT:academic_contacts4pages/Configuration/TSconfig/page.tsconfig'
Copied!

Affected Installations 

Every installation that imports a page TSconfig file of this extension by path, or that copied such a path into its own site package. An installation that relies only on the auto-included Configuration/page.tsconfig of the extension, or on its site set, is unaffected.

ChangeLog v2 

Every change to the Academic Contacts 4 Pages extension is documented here.

Also available 

Breaking: Removed duplicated ContractItemsProcFunc in EXT:academic_contacts4pages 

Description 

EXT:academic_contacts4pages shipped its own \FGTCLB\AcademicContacts4pages\Backend\FormEngine\ContractItemsProcFunc , which basically duplicated the contract itemsProcFunc of the hard-depended EXT:academic_persons.

The duplicated class has been removed. The contract selection field now uses the itemsProcFunc shipped by EXT:academic_persons, \FGTCLB\AcademicPersons\Backend\FormEngine\ContractItems , which is easier to maintain, especially when changes to the itemsProcFunc are made.

Impact 

Referencing the removed class throws a PHP error. The shipped TCA of tx_academiccontacts4pages_domain_model_contact has been switched to the EXT:academic_persons handler.

Affected Installations 

Installations that reference \FGTCLB\AcademicContacts4pages\Backend\FormEngine\ContractItemsProcFunc in own TCA/FlexForm configuration, extend or replace it, or call it directly.

Migration 

Use the itemsProcFunc provided by EXT:academic_persons instead:

FGTCLB\AcademicContacts4pages\Backend\FormEngine\ContractItemsProcFunc->itemsProcFunc
=> FGTCLB\AcademicPersons\Backend\FormEngine\ContractItems->itemsProcFunc
Copied!

Projects that need to adjust the available contract items should use the \FGTCLB\AcademicBase\Event\ModifyTcaSelectFieldItemsEvent event listener instead of a custom itemsProcFunc.

Feature: Dedicated selection of address records 

Description 

A contact record ( tx_academiccontacts4pages_domain_model_contact ) now carries three additional selects, grouped in the palette Displayed address records:

  • E-mail address ( email_address )
  • Phone number ( phone_number )
  • Physical address ( physical_address )

They are offered as soon as a contract is selected and list the email addresses, phone numbers and physical addresses of exactly that contract. The contract field reloads the form on change, so the selects always match the contract that is currently selected.

Each select offers two options besides the address records themselves:

Display all
The default. All address records of that kind are rendered, the behaviour of every contact record created so far.
Do not display
The address record kind is left out of the frontend output for this contact entirely.

The narrowing is applied by the contact record itself, so it takes effect in the Contacts for this page plugin, in the page based rendering through ContactsProcessor and in project templates built on either of them - they all reach the address records through Contact::getContract() . Contact::getUnfilteredContract() returns the contract with all of its address records.

Only default language records are offered: the selection is shared by all translations of a contact, and the frontend resolves the language overlay of the address records itself. Deleted records are not offered. Hidden ones are, marked with a [Hidden] prefix - whether they reach the frontend is decided by the plugin, see below.

Impact 

Editors can restrict a page contact to a single email address, phone number and physical address of the contract, or suppress a kind completely - for example to publish the office phone number of a person on one page and the private one on another, from the same contract.

Hidden address records reach the frontend only through the Contacts for this page plugin and only while its Show hidden records option ( settings.showHiddenRecords ) is enabled, the same option that decides about hidden contacts. That covers both ways of displaying them: with the option enabled a hidden record is part of Display all and can be selected as the single one to display. Everywhere else - the page based rendering through ContactsProcessor included - hidden records are left out, and a selection pointing at one behaves like Do not display.

A selection that cannot be resolved at all behaves the same way and renders nothing. This happens when the contract of a contact is switched after the selection was made, or when the selected address record is deleted afterwards. There is deliberately no fallback to Display all: publishing the private phone number of a person because a record was removed is worse than publishing nothing.

Affected Installations 

All installations using the EXT:academic_contacts4pages extension starting with version 2.4. The three new columns default to Display all, so existing contact records keep their current frontend output and no migration is required. A database compare has to be applied for the new columns.

Feature: "Show hidden records" plugin option for the contacts list 

Description 

A new boolean plugin option Show hidden records ( settings.showHiddenRecords , checkbox/toggle, default off) was added to the following plugin:

  • Contacts for this page ( academiccontacts4pages_list )

This plugin previously had no flexform at all. A new Configuration/FlexForms/ContactsList.xml data structure is introduced and registered for the plugin (a "Configuration" tab with the pi_flexform field is added to the content element), so the option can be configured per plugin instance.

When the option is enabled, the frontend contacts listing includes hidden (disabled) records, independent of the Context API visibility settings. Only the hidden enable column (disabled) is ignored; the deleted restriction stays in effect.

Impact 

Editors can now opt in per plugin instance to display hidden contacts in the frontend, for example to preview intentionally hidden records without changing the global preview settings. The option is off by default, so existing plugin instances keep their current behaviour.

Affected Installations 

All installations using the EXT:academic_contacts4pages extension starting with version 2.4. No action is required for existing installations.

Important: Extended ContactRepository::findByPid() signature 

Description 

To support the new "Show hidden records" plugin option, the \FGTCLB\AcademicContacts4pages\Domain\Repository\ContactRepository gained an extended method:

  • findByPid(int $pid, bool $showHidden = false): QueryResultInterface — the new optional $showHidden parameter was appended.

When $showHidden is true , the query ignores only the disabled (hidden) enable field via the Extbase query settings. The \FGTCLB\AcademicContacts4pages\Controller\ContactsController reads $this->settings['showHiddenRecords'] and passes it to the repository.

Impact 

The change is non-breaking: the new parameter has a default value, so existing calls keep working unchanged. Projects that extend or replace ContactRepository should adopt the same signature when overriding findByPid() .

Affected Installations 

Only installations that extend or override \FGTCLB\AcademicContacts4pages\Domain\Repository\ContactRepository need to take the extended signature into account. All other installations are unaffected.

Breaking: Removed partials 

Description 

Some partials got removed as the templating structure has changed.

Impact 

Those partials include:

  • Resources/Private/Partials/Contacts/ContactWidget.html
  • Resources/Private/Partials/Contacts/ContactWidgetAddress.html

This extension now reuses the partials of the academic-persons extension.

Affected Installations 

EXT:academic_contact4pages installations overriding those partials.

Migration 

Adapt overrides accordingly to the partials provided by EXT:academic-persons.

Important: Basic bootstrap styling 

Description 

The default templating now supports basic bootstrap styling and is semantically optimized to also not lack any major accessibility.

Sitemap