The JEM Jubilee Module (mod_jem_jubilee) finds JEM events whose month and day match a selected calendar date. It is designed for “on this day” lists, anniversaries, institutional history, commemorations and archive highlights rather than a normal upcoming-events list.
Overview
The module starts with the current date in the visitor's configured Joomla time zone, applies an optional day offset and compares the resulting month and day with the stored event dates. The event year is ignored for matching, but the original year is displayed before each event title.
Single-day and multi-day events can be matched by their start date, end date, either boundary, or any day in their complete date range. Open-date events are excluded because they have no month and day to compare.
Current publication-state behaviour: the current JEM 5.0.1, 5.0.2 Beta 1 and 5.1.0 Beta 4 module forms do not expose a Publishing State selector. A newly configured Jubilee module therefore uses archived events, which is the normal source for historical anniversaries. The runtime still recognises legacy saved state values, but administrators should not rely on an option that is not present in the current form.
Current Compatibility
| JEM version | Status | Joomla | Documentation scope |
| JEM 5.0.1 |
Stable |
Joomla 5.x and 6.x |
Primary reference for the common Jubilee options and examples in this article. |
| JEM 5.0.2 Beta 1 |
Maintenance beta |
Joomla 5.x and 6.x |
Uses the same Jubilee options and temporarily supports known legacy module CSS filenames. |
| JEM 5.1.0 Beta 4 |
Development beta |
Joomla 5.x and 6.x |
Includes development changes documented separately in the appendix. |
JEM 5.x requires PHP 8.3 or newer. Verify the requirements of the exact package before updating a production website.
Requirements
- JEM and the Jubilee Module must be installed and enabled.
- The module must be assigned to a visible template position and the required menu pages.
- Events need a valid start date. Open-date events are not anniversary candidates.
- For the default archived-event workflow, JEM must have archived the historical events that should be considered.
- The visitor must have access to the event and its assigned categories.
- Event images require an Intro/List or Full/Detail image assigned to the event.
- The More information action requires an accessible Joomla article associated with the event.
Create the Module
- Open System → Manage → Site Modules.
- Select New and choose JEM - Module-Jubilee.
- Enter the Joomla module title and choose a template position.
- Configure the target date, matching mode, output count and optional filters.
- Choose the calendar, image, description and date presentation.
- Select an alternative layout if required.
- Set Joomla menu assignment and access, then publish and save the module.
How Anniversary Matching Works
- JEM obtains the current date using the Joomla/user time zone.
- Day Offset moves that date forwards or backwards by complete days.
- JEM reduces the target to a four-digit month/day value such as
1004.
- The selected Date Match Mode compares that month/day with each event's start and end dates.
- The year is ignored for matching. The original event year remains visible in the result.
- Access, category, venue and county filters are then applied before the display limit or random selection.
Example: on 4 October 2026, an event dated 4 October 2018 can match because both dates have month/day 1004. With Day Offset set to 1, the same module searches for 5 October anniversaries instead.
Multi-day and Cross-year Events
The Any time from start to end date mode also handles date ranges that cross New Year. For example, an event from 28 December to 4 January can match 30 December or 2 January. The start/end modes only compare the selected boundary date.
Leap-day note: an event dated 29 February matches naturally when the target date is 29 February. In a non-leap year, the current date cannot become 29 February unless the applied offset reaches a valid 29 February in a leap year.
Anniversary Selection Options
| Option | Default | Purpose |
| Events in module |
5 |
Maximum number of displayed events. Runtime values are limited to 1–100. |
| Show “No events” |
No |
Shows the translated empty-result message. When disabled, the module returns no output if no events match. |
| Day Offset |
Empty / 0 |
Moves the target date forwards with a positive number or backwards with a negative number. The unit is complete days. |
| Date Match Mode |
Any time from start to end date |
Selects how the target month/day is compared with single-day and multi-day events. |
| Include Past Years |
No |
Skips the normal current-date window when the runtime evaluates published or mixed-state results. The default archived-event source already permits historical years. |
| Shuffle Events |
No |
Selects a random subset when more candidates are available than the visible count. |
| Shuffle Pool Limit |
Empty |
Maximum number of candidates retrieved before random selection. The runtime fallback is 20, never smaller than the visible count and never larger than 100. |
| Event Order |
Date descending |
Orders candidates by event date, time and creation date. Descending shows the most recent historical year first; ascending shows the oldest first. |
Date Match Modes
| Mode | Matching rule | Typical use |
| Any time from start to end date |
The target month/day falls anywhere in the event range, including a range crossing New Year. |
Festivals, exhibitions, campaigns and other multi-day memories. |
| Exact on start date |
The target month/day equals the event start month/day. |
Founding dates, openings, launches and first editions. |
| Exact on end date |
The target month/day equals the end month/day. A missing end date falls back to the start date. |
Closings, final performances and completion anniversaries. |
| Exact on start or end date |
Either the start or end month/day can match. |
Lists where both opening and closing anniversaries matter. |
Ordering and Shuffle Interaction
JEM first retrieves the ordered candidate pool. If shuffling is enabled, it randomly chooses which candidates remain, while the chosen events keep their original date order in the rendered list. Increase Shuffle Pool Limit when a broader historical pool should have a chance to appear.
Title and Destination Links
| Option | Default | Purpose |
| Max. Title Length |
25 |
Limits the visible event title. The original title is retained for the link title attribute. |
| Link to Event on Title |
Yes |
Links the title to the event page when the visitor is allowed to open it. |
| Event block layout |
Default |
Optionally forces the event block opened from the module to use the Details or Compact layout. |
| Venue block layout |
Default |
Optionally forces the venue block reached from the event page to use Details or Compact. |
The two block-layout selectors are shown only when title links are enabled. Default preserves the normal JEM/menu decision; use an explicit value only when this module needs a different destination presentation.
Calendar Sheet and Colours
| Option | Default | Purpose |
| Show Calendar |
Yes |
Displays one calendar sheet containing the module's target month and day. |
| Colour |
Red at runtime |
Selects Red, Blue, Green, Orange or User-defined for the calendar sheet. |
| User Colour |
#EEEEEE |
Sets the custom calendar colour when User-defined is selected. JEM chooses a contrasting month label for dark and light colours. |
The calendar sheet represents the searched anniversary date, not the historical date of each result. The event's original year is printed before its title, and the original date can be displayed separately with Date Display-Type.
Event Image Options
| Option | Default | Purpose |
| Show Flyer |
Yes |
Displays the selected event image when one is available. |
| Event image source |
Intro/List image |
Uses the Intro/List image or requests the Full/Detail image. If the full image is missing, JEM falls back to the intro image. |
| Displayed image |
Original Limited |
Uses either the generated thumbnail or the original file constrained by the configured limits. Original Limited can download a larger source file. |
| Maximum width |
800 px |
Maximum displayed width for Original Limited. Accepted range: 1–4096 px. |
| Maximum height |
800 px |
Maximum displayed height for Original Limited. Accepted range: 1–4096 px. |
| Ribbon scale |
60% |
Scales status ribbons on Original Limited images. Accepted range: 50–200%. Thumbnail ribbons use the global JEM scale. |
| Flyer Links to... |
Image on full page |
Opens the original image on a page, in a modal window, opens event details, or disables the flyer link. |
Images keep their aspect ratio and are not enlarged beyond their source dimensions. Use Thumbnail for the lightest listing output. Use Original Limited when a larger, sharper image is required and the additional download size is acceptable.
Description and Actions
| Option | Default | Purpose |
| Show Description |
Yes |
Displays the prepared event intro text. |
| Max Description Length |
300 |
Limits the description to the configured number of characters. |
| Allow Line Breaks |
No |
Preserves line breaks as <br>; otherwise they are replaced by spaces. |
| Show “Read more...” Break |
No |
Shows a link or button when the event has content after its Joomla read-more break. |
| Show More Information |
Yes (link) |
Shows a link or button when an accessible Joomla article is associated with the event. |
| Show More Information Title |
No |
Appends the associated article title to the More information label. |
Two different actions: Read more continues the event description. More information opens the separate Joomla article associated with the event.
Date and Time Display
| Option | Default | Purpose |
| Date Display-Type |
Hide date |
Hides the per-event date, shows the formatted original date, or shows a relative difference from today. |
| Date Format |
Empty |
Uses the JEM/global date format when empty, or a PHP date format such as j M Y. |
| Show Time |
No |
Shows the event time when Date Display-Type is Show date and a time exists. |
| Time Format |
Empty |
Uses the JEM/global time format when empty, or a PHP time format such as H:i. |
Date Display-Type Values
| Value | Output |
| Hide date |
No per-event date or time is printed. The title still begins with the original event year. |
| Show date |
Displays On DATE for a single-day event or From DATE Until DATE for a multi-day event. Time can also be displayed. |
| Show year difference |
Despite the legacy label, the runtime can produce today, tomorrow, yesterday, years ago/ahead, months ago/ahead or days ago/ahead according to the actual difference from the original start date. |
The date sheet and Date Display-Type have separate purposes: the sheet shows the current target anniversary, while Date Display-Type describes each event's original date.
Event and Location Filters
| Option | Default | Purpose |
| Show Category |
No |
Displays the event category information. |
| Link to Category |
Yes |
Links category names when category display is enabled. |
| Show Venue |
No |
Displays the event venue. |
| Link to Venue |
Yes |
Links the venue when venue display is enabled. |
| Categories |
Empty |
Limits candidates to one or more selected JEM categories. Empty means all accessible categories. |
| Venues |
Empty |
Limits candidates to one or more selected JEM venues. Empty means all venues. |
| County |
Empty |
Limits candidates by comma-separated venue county/state values. |
| County Match Mode |
Complete Match |
Uses exact matching or checks whether the venue county/state contains one of the configured strings. |
Selection filters and visible metadata are independent. For example, a module can filter to one venue while keeping Show Venue disabled.
Module Intro and Footer Text
| Option | Default | Purpose |
| Show intro text |
No |
Displays a custom editor block above the module content. |
| Intro text |
Empty |
Safe HTML displayed above the module. Jubilee replaces [day], [month] and [year] with the offset-adjusted target date. |
| Show footer text |
No |
Displays a custom editor block below the module content. |
| Footer text |
Empty |
Safe HTML displayed after the Jubilee layout. |
Example intro: On [day] [month], these events became part of our history. With a target date of 4 October, the displayed sentence uses that day and month. The token [year] is the target year, not an event's historical year.
Advanced Options
| Option | Default | Purpose |
| Layout |
Default |
Selects a supplied module layout or a valid template layout override. |
| Show status indicators |
Yes |
Displays the module status badges/ribbons enabled in JEM Basic Settings. |
| Module Class |
Empty |
Adds custom CSS classes to this module instance. Joomla validates the value as CSS identifiers. |
| Caching |
Use Global |
Uses Joomla's global module caching setting or disables caching for this instance. |
| Cache Time |
900 seconds |
Controls how long the rendered module result is cached. |
Because the target date changes daily, avoid a cache lifetime that can keep yesterday's Jubilee output visible after midnight. Joomla, template, reverse-proxy and CDN caches can all affect the final result.
Supplied Layouts
| Layout | PHP file | CSS file | Use |
| Default |
tmpl/default.php |
tmpl/default.css |
Standard Jubilee presentation. |
| Responsive |
tmpl/responsive.php |
tmpl/responsive.css |
Alternative stylesheet intended for flexible template positions and narrower layouts. |
The two supplied PHP layouts currently render the same Jubilee information and controls. Their practical distinction is the selected layout basename and stylesheet, which lets a template maintain separate responsive styling. Always test the chosen layout in the real module position.
Additional Supplied Stylesheets
red.css, blue.css, green.css and orange.css style the predefined calendar colours.
alpha.css styles the user-defined calendar colour.
iconfont.css or iconimg.css is selected according to the JEM icon setting.
media/com_jem/css/custom/jem-user-module.css is loaded last as a shared additive custom stylesheet for JEM modules.
PHP Layout Overrides
Copy the required PHP layout into the active site template:
templates/YOUR_TEMPLATE/html/mod_jem_jubilee/default.php
templates/YOUR_TEMPLATE/html/mod_jem_jubilee/responsive.php
Do not edit files inside modules/mod_jem_jubilee/tmpl, because an update can replace them. Joomla discovers PHP layout overrides from the template's html directory.
CSS Overrides
JEM resolves each Jubilee stylesheet basename in this order:
templates/YOUR_TEMPLATE/css/mod_jem_jubilee/BASENAME.css
templates/YOUR_TEMPLATE/html/mod_jem_jubilee/BASENAME.css
media/mod_jem_jubilee/css/BASENAME.css
modules/mod_jem_jubilee/tmpl/BASENAME.css
The first existing file wins for that basename. CSS files are independent: overriding default.css does not prevent JEM from also loading the chosen colour file and icon file.
Current CSS Filenames
| Purpose | Current filename | Example override |
| Default layout |
default.css |
templates/YOUR_TEMPLATE/css/mod_jem_jubilee/default.css |
| Responsive layout |
responsive.css |
templates/YOUR_TEMPLATE/css/mod_jem_jubilee/responsive.css |
| Font icons |
iconfont.css |
templates/YOUR_TEMPLATE/css/mod_jem_jubilee/iconfont.css |
| Image icons |
iconimg.css |
templates/YOUR_TEMPLATE/css/mod_jem_jubilee/iconimg.css |
| User-defined calendar |
alpha.css |
templates/YOUR_TEMPLATE/css/mod_jem_jubilee/alpha.css |
| Predefined calendar |
red.css, blue.css, green.css or orange.css |
templates/YOUR_TEMPLATE/css/mod_jem_jubilee/red.css |
Legacy Filename Migration
| Legacy filename | Current filename |
mod_jem_jubilee.css |
default.css |
mod_jem_jubilee_responsive.css |
responsive.css |
mod_jem_jubilee_iconfont.css |
iconfont.css |
mod_jem_jubilee_iconimg.css |
iconimg.css |
- JEM 5.0.1: use the current filenames shown above for predictable overrides.
- JEM 5.0.2 Beta 1: temporarily recognises known legacy filenames as a compatibility fallback.
- JEM 5.1.0 Beta 4: uses current filenames. The JEM Control Panel/CSS Manager can detect known legacy files and offer a guided migration.
The guided migration does not silently overwrite an existing destination file. Review reported conflicts and keep a backup before accepting file changes.
Configuration Examples
- Events in module: 5
- Date Match Mode: Exact on start date
- Include Past Years: Yes
- Event Order: Date descending
- Date Display-Type: Show year difference
- Show Calendar: Yes
Shows the most recent historical anniversaries first, with relative age text.
- Categories: Institutional history
- Date Match Mode: Exact on start date
- Include Past Years: Yes
- Event Order: Date ascending
- Date Display-Type: Show date
- Show Description: Yes, 180 characters
Presents the oldest foundation milestone first and keeps the original date visible.
- Date Match Mode: Any time from start to end date
- Include Past Years: Yes
- Categories: Festivals
- Show Flyer: Yes
- Displayed image: Thumbnail
- Layout: Responsive
Keeps a festival visible on every anniversary day covered by its original date range.
- Day Offset:
1
- Date Match Mode: Exact on start date
- Include Past Years: Yes
- Intro text:
Tomorrow, [day] [month], in our history
- Show Calendar: Yes
Previews the following day's anniversaries while keeping the displayed tokens aligned with the shifted target date.
- Events in module: 3
- Shuffle Events: Yes
- Shuffle Pool Limit: 20
- Include Past Years: Yes
- Show Flyer: Yes
- Show Description: Yes, 120 characters
Rotates three anniversary highlights selected from up to twenty ordered candidates.
- Date Match Mode: Exact on end date
- Include Past Years: Yes
- Categories: Exhibitions
- Date Display-Type: Show date
- Show Category: Yes
Commemorates the final day of exhibitions or programmes. Single-day records still match through their start-date fallback.
- Venues: selected museum and civic venues
- County:
Northshire, Westshire
- County Match Mode: Complete Match
- Show Venue: Yes
- Link to Venue: Yes
- Show More Information: Yes (button)
Restricts anniversary stories to selected venues and regions, with direct access to venue and associated-article information.
Frontend Behaviour and Limitations
- The module is an anniversary lookup, not a recurrence engine. It does not create a new event every year.
- Matching ignores the event year but display content continues to use the original event data.
- Open-date events are always excluded.
- The target date uses the Joomla/user time zone and the configured day offset.
- The original year is always prefixed to the event title in the supplied layouts.
- A module-level calendar sheet shows the target date once; it is not a separate date tile for every event.
- Category, venue, county and access restrictions can reduce the result after the anniversary match.
- JEM 5.0.1 and 5.0.2 retain legacy per-item microdata in the supplied layouts. JEM 5.1.0 removes that incomplete listing markup; canonical Event structured data belongs on the event-detail page.
Troubleshooting
| Problem | Likely cause | Check |
| No anniversary events are shown. |
No archived accessible event matches the target month/day, or the filters remove every match. |
Check event state, dates, access, categories, venues, county and Date Match Mode. Enable Show “No events” while testing. |
| Older matching events are missing. |
The event is not archived/accessible, an active filter removes it, or the candidate limit is too small. In legacy published/mixed-state configurations, Include Past Years can also matter. |
Check state and access, review every filter, then increase the visible count or Shuffle Pool Limit as required. |
| A multi-day event does not appear. |
The selected mode checks only its start or end boundary. |
Use Any time from start to end date when every day in the range should match. |
| The calendar date differs from the event date. |
This is expected Jubilee behaviour. |
The calendar is the target anniversary date; the heading year and optional date line belong to the historical event. |
| No event time is visible. |
Date Display-Type is Hide date or Show year difference, Show Time is disabled, or the event has no time. |
Select Show date, enable Show Time and verify the stored event time. |
| The relative label says months or days instead of years. |
The legacy option label is narrower than the actual runtime behaviour. |
This is expected when the difference is less than a full year. |
| The flyer link opens the wrong destination. |
Flyer Links to... uses another target. |
Select full-page image, modal image, event details or no link. |
| An intro token is not replaced. |
The token is misspelled or is placed outside Jubilee Intro text. |
Use exactly [day], [month] or [year] in the module's Intro text field. |
| A CSS override is ignored. |
Wrong active template, directory, basename, filename case or cached stylesheet. |
Confirm templates/YOUR_TEMPLATE/css/mod_jem_jubilee/BASENAME.css and clear Joomla, browser and optimisation caches. |
| Yesterday's results remain after midnight. |
A module, Joomla, server, CDN or browser cache still contains the previous output. |
Reduce cache time, temporarily disable module caching and clear every active cache layer. |
Appendix: What Is New in JEM 5.1.0 Beta 4
Beta notice: JEM 5.1.0 Beta 4 is a development release. Test it on a staging website and keep a full backup before using it with production data.
Event Hierarchy Filter
JEM 5.1.0 Beta 4 adds the Event hierarchy option. It controls whether a Jubilee instance considers parent events, programme items/subevents or both:
| Value | Behaviour |
| Calendar default |
Uses JEM's normal calendar hierarchy policy. |
| Parent events only |
Includes top-level events and excludes child programme items. |
| Subevents only |
Includes programme items and excludes their parent events. |
| Parent events and subevents |
Includes both hierarchy levels in the anniversary candidate pool. |
- Event hierarchy: Subevents only
- Date Match Mode: Exact on start date
- Include Past Years: Yes
- Categories: Conference sessions
- Event Order: Date descending
- Events in module: 6
Shows historical session-level anniversaries without also listing their parent conferences.
Image Defaults
Jubilee continues to default new module instances to Original Limited with 800 × 800 px limits. Thumbnail remains available when lower transfer size is more important than source-image detail.
Current CSS Filenames
JEM 5.1.0 uses the current layout filenames at runtime and does not retain the temporary legacy-filename fallback from JEM 5.0.2. The JEM Control Panel/CSS Manager detects known legacy module overrides and offers an explicit migration. It does not overwrite an existing destination and reports conflicts or unwritable paths.
Structured Data Responsibility
The supplied Jubilee layouts no longer emit incomplete per-item Event microdata. Complete canonical Event structured data belongs to the event-detail page. Removing partial module markup avoids presenting multiple incomplete Event entities on listing pages.
Related Documentation
GitHub References