marekskopal / typo3-team
Team members list plugin for TYPO3 CMS
Package info
github.com/marekskopal/typo3-team
Type:typo3-cms-extension
pkg:composer/marekskopal/typo3-team
Requires
- php: >=8.3
- typo3/cms-backend: ^13.4.24 || ^14.3.0
- typo3/cms-core: ^13.4.24 || ^14.3.0
- typo3/cms-extbase: ^13.4.24 || ^14.3.0
- typo3/cms-fluid: ^13.4.24 || ^14.3.0
Requires (Dev)
- phpstan/extension-installer: ^1.3
- phpstan/phpstan: ^2.0
- phpstan/phpstan-deprecation-rules: ^2.0
- phpstan/phpstan-phpunit: ^2.0
- phpstan/phpstan-strict-rules: ^2.0
- phpunit/phpunit: ^12.0
- shipmonk/phpstan-rules: ^4.0
- slevomat/coding-standard: ^8.14
README
Team members list as a content element in TYPO3. Members with photo, role, contact details and rich-text bio are managed in the TYPO3 backend; the frontend renders a responsive card grid with an optional detail page.
Features
- Team members with first name, last name, position, photos (FAL) and rich-text bio
- Contact fields: email, phone, LinkedIn URL, website URL
- Manual drag & drop sorting in the backend
- Pin members as top — top members are sorted first and can be listed separately
- Multiple images per member via FAL; main image getter exposed for templates
- TYPO3 system categories support per member (e.g. departments)
- Show only top FlexForm option to display only pinned members
- Template layouts — switchable per content element via FlexForm, configured through TSconfig or PHP globals
- Separate List and Show actions for grid and member detail page
- Responsive CSS grid, no JavaScript
- Multilingual support (EN, CS, DE labels out of the box)
- Customizable templates and styling
Requirements
- PHP 8.3+
- TYPO3 13.4 or 14.x
Installation
composer require marekskopal/typo3-team
After installation, run the database analyser in the TYPO3 Install Tool to create the required tables.
Setup
Include the TypoScript Set Team in your site package or via the site configuration sets.
Backend Setup
Create Team member records on the page where the content element is placed:
- First name / Last name — required
- Position — job title shown under the name
- About — rich-text bio (RTE)
- Email / Phone / LinkedIn URL / Website URL — optional contact fields
- Images — one or more FAL files; the first one is used as the main image
- Categories — optional TYPO3 system categories
- Top — pin the member so they are sorted first (and can be shown exclusively via the Show only top option)
Drag and drop members to set their display order within each tier (top members always appear first). Then add the Team content element to the same page.
Content Element Options (FlexForm)
| Option | Description |
|---|---|
| Show only top | When enabled, only members marked as Top are displayed |
| Member ordering | Choose the ordering strategy (top + sorting, sorting only, UID, alphabetical) |
| Template layout | Select an alternative template layout defined in TSconfig or PHP globals |
Domain Model
The Member model exposes the following getters:
getFirstName(): stringgetLastName(): stringgetFullName(): string— concatenated, trimmedgetPosition(): stringgetAbout(): string— RTE contentgetEmail(): stringgetPhone(): stringgetLinkedInUrl(): stringgetWebsiteUrl(): stringgetImages(): ObjectStorage<FileReference>getImageMain(): ?FileReference— first image, ornullgetCategories(): ObjectStorage<Category>getPrimaryCategory(): ?CategoryisTop(): bool
Template Layouts
Register custom template layouts in Page TSconfig:
tx_msteam.templateLayouts {
my_layout = My custom layout
}
Or in PHP (e.g. ext_localconf.php):
$GLOBALS['TYPO3_CONF_VARS']['EXT']['ms_team']['templateLayouts'][] = ['My layout label', 'my_layout'];
Then configure the corresponding template paths in TypoScript:
plugin.tx_msteam_team.settings.templateLayouts {
my_layout {
templateRootPath = EXT:your_extension/Resources/Private/Templates/MsTeam/MyLayout/
partialRootPath = EXT:your_extension/Resources/Private/Partials/MsTeam/MyLayout/
layoutRootPath = EXT:your_extension/Resources/Private/Layouts/MsTeam/MyLayout/
}
}
Customization
Templates
Override templates by setting custom paths in TypoScript:
plugin.tx_msteam_team.view.templateRootPaths.10 = EXT:your_extension/Resources/Private/Templates/MsTeam/
plugin.tx_msteam_team.view.partialRootPaths.10 = EXT:your_extension/Resources/Private/Partials/MsTeam/
plugin.tx_msteam_team.view.layoutRootPaths.10 = EXT:your_extension/Resources/Private/Layouts/MsTeam/
Styling
The extension includes minimal CSS. Key classes:
| Class | Element |
|---|---|
.msteam-wrapper |
Outer wrapper |
.msteam__list |
Grid of member cards |
.msteam__item |
Single member card |
.msteam__image |
Cropped square photo on the card |
.msteam__name |
Member full name on the card |
.msteam__position |
Job title on the card |
.msteam__detail |
Detail page wrapper |
.msteam__contact |
Contact list (email/phone/LinkedIn/website) |
License
GPL-2.0-or-later