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
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
department values from fe_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.
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.storagePid points 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