Usage
On this page
The extension provides three plugins that are registered as content elements
(CType-based, not list_type).
Adding plugins to pages
All plugins are available as content elements in the TYPO3 backend:
- Open a page in the Page module
- Click + Content
- Select the Plugins tab
- Choose one of the available plugins
PersonList
CType: dveducationpersons_personlist
Displays a paginated list of person records with search, department filtering, and A-Z letter navigation.
- Controller action:
PersonController->list(non-cacheable) - HTTP method: The search form submits via POST
- FlexForm settings: Detail page, Items per page, Departments whitelist
- Place this plugin on your person directory page
- Configure the Detail page in the FlexForm to link each person to their full profile
PersonDetail
CType: dveducationpersons_persondetail
Displays the full profile of a single person, including all sub-entities (vita, publications, research, teaching, links).
- Controller action:
PersonController->show(cacheable) - FlexForm settings: List page (for the back link)
- Place this plugin on a separate detail page
- Configure the List page in the FlexForm for the back-to-list link
- The person record is passed via URL parameter from the list view
PersonEdit
CType: dveducationpersons_personedit
Allows logged-in frontend users to edit their own person profile.
- Controller actions:
PersonEditController->edit,PersonEditController->update(both non-cacheable) - Place this plugin on a page protected by a frontend user group
- The logged-in user's own fe_users record is loaded automatically via the TYPO3 Context API
- The controller includes
initializeUpdateAction()which configures property mapping for the allowed fields - The edit form uses manual form field names (e.g.
person[department]) instead of Extbase object binding to avoid HMAC hash generation issues with the fe_users table mapping
Important
Frontend login setup is required for this plugin. See
Frontend login setup (config.storagePid) for the full setup instructions including
config.storagePid and felogin configuration.
Creating person records
- Create a sysfolder in the page tree to store person records
- Open the sysfolder and click + Create new record
- Select Frontend User
- Set the Record Type to Education Person (this sets the
tx_extbase_typefield toDavitec\DvEducationPersons\Domain\Model\Person) - Fill in the base fields (username, password, usergroup) and the academic profile fields (first name, last name, title, department, position, etc.)
- Save the record
- Make sure the sysfolder is configured as the storage PID (see Configuration)
Department filter (dynamic)
The department dropdown in the PersonList search form is populated dynamically
from existing person records. The PersonRepository->findDistinctDepartments()
method uses a QueryBuilder query to:
- Select distinct non-empty
departmentvalues fromfe_users - Filter by
tx_extbase_type = 'Davitec\DvEducationPersons\Domain\Model\Person' - Exclude deleted and disabled records
- Sort alphabetically
This means there is no static list of departments to maintain. When a new department value is entered on a person record, it automatically appears in the frontend dropdown. When the last person of a department is removed or disabled, the department disappears from the filter.
The FlexForm Departments setting works differently: it is a backend-side
whitelist (comma-separated department names) that restricts which persons
are displayed after the query. It does not affect the dropdown options.
Search and filter behaviour
The PersonList plugin supports three filter modes that are mutually prioritized:
- Search term -- free text search across first name, last name, position, department, and teaching area (highest priority)
- Department -- filter by a specific department from the dropdown
- Letter -- A-Z navigation filtering by last name initial
The search form submits via POST. All tx_dveducationpersons_* parameters are
excluded from cHash calculation (configured in ext_localconf.php) to prevent
cHash validation errors.
Reset button
A Reset link appears next to the submit button when any filter is active (search term, department, or letter). Clicking it navigates to the list page URL without any filter parameters, restoring the unfiltered list.
Adding sub-entities
Sub-entities are managed as inline (IRRE) records within the person record. Open a person record and use the Vita & Publications tab to add:
VitaEntry
Career milestones and education history entries. Each entry typically includes a date range and description.
Publication
Academic publications, papers, and articles. Add bibliographic data for each publication.
Research
Research projects and areas of interest. Describe ongoing or completed research activities.
Teaching
Courses, seminars, and teaching activities. Document the person's teaching portfolio.
Link
External URLs and social profile links. Add links to personal websites, ORCID profiles, ResearchGate, and similar.
Frontend editing
The PersonEdit plugin enables self-service profile editing for logged-in frontend users.
Setup:
- Ensure
config.storagePidpoints to the fe_users storage folder (see Frontend login setup (config.storagePid)) - Install and configure the felogin system extension with redirect to the edit page
- Create a page for profile editing
- Protect the page with a frontend user group (via Access tab)
- Add the PersonEdit plugin to the page
- Ensure the frontend user has a person record of type Education Person
(matching
tx_extbase_type)
When a user accesses the page, the edit form is pre-filled with their current profile data. The editable fields are: department, position, room, telephone, mobile, fax, www, teaching area, and consultation hours. Read-only fields (username, name, email) are not exposed in the form.
After submitting, the update action validates that the submitted person UID
matches the logged-in user (ownership check) before persisting the changes.
Tip
A typical page structure:
- Person directory page with PersonList plugin
- Detail page with PersonDetail plugin
- Login page with felogin plugin (redirect target: edit page)
- Edit page (access-restricted) with PersonEdit plugin