Introduction 

What does it do? 

The Education Courses extension provides a generic course catalog system for the education sector. It was originally extracted from the EIPOS course management system and designed to be reusable across different TYPO3 projects.

The extension manages the complete lifecycle of educational offerings: from defining course templates with descriptions, objectives, and target groups, to scheduling concrete events with dates, pricing, and locations, down to individual session dates within multi-day events.

It provides four frontend plugins for listing and displaying courses and events, including full-text search and type-based filtering.

Features 

Domain models 

The extension ships with six domain models that cover the full course catalog domain:

  • Course -- The main entity. Holds title, description, content, objectives, target groups, admission requirements, images, and a slug for URL generation.
  • Event -- A concrete scheduled instance of a course with start/end dates, duration, price, location reference, booked-up and on-request flags, and an event code.
  • SingleEvent -- An individual date entry within a multi-day event, providing fine-grained scheduling (title, start date, end date).
  • Type -- Categorises courses (e.g. workshop, seminar, certificate program) with title, description, and slug.
  • Location -- Physical venue with name, street, zipcode, and city. Provides a computed full address string.
  • ContactPerson -- Contact details (salutation, title, first name, last name, phone, email) linked to courses via MM relation.

Three-level hierarchy 

The data model follows a clear three-level hierarchy:

Course
  |-- Event (IRRE, cascade delete)
  |     |-- SingleEvent (IRRE, cascade delete)
  |
  |-- ContactPerson (MM relation)
  |-- SimilarCourses (MM self-relation)
Copied!
  • CourseEvent: One course can have multiple scheduled events (inline relation with cascade delete).
  • EventSingleEvent: Each event can contain multiple single-day entries for multi-day schedules (inline relation with cascade delete).
  • CourseContactPerson: Many-to-many relation allowing shared contact persons across courses.
  • CourseSimilarCourses: Self-referencing many-to-many relation for cross-linking related courses.

Frontend plugins 

Four content element plugins are registered:

  • CourseList -- Lists courses with text search and type filter. The list action is non-cacheable to support POST-based search.
  • CourseDetail -- Displays a single course with all its details, events, contact persons, and similar courses.
  • EventList -- Lists upcoming events with filtering. The list action is non-cacheable.
  • EventDetail -- Displays a single event with its schedule (single events), location, and pricing.

Search and filter 

The course list plugin provides:

  • Text search via a search term input field
  • Type filter to narrow results by course type
  • Reset button to clear all filters
  • Pagination with configurable items per page

Slug management 

Automatic slug generation is provided for the following entities:

  • Courses (slug field)
  • Events (slug field)
  • Types (slug field)

Slugs enable human-readable URLs when used with TYPO3's route enhancer configuration.

Compatibility 

  • TYPO3: v12.4 LTS and v13.4 LTS
  • PHP: 8.2, 8.3, 8.4