The JEM Calendar Module (mod_jem_cal) displays JEM events in a compact monthly calendar. It provides event-day links, configurable tooltips, category and venue filters, and optional AJAX navigation.
Overview
The module is designed for sidebars, event landing pages, dashboards and other compact areas where visitors need to identify days containing events. A day can open the JEM day view or go directly to the event when only one event is assigned to that date.
Each active day can provide a tooltip containing event titles and, when enabled, times, categories, venues and event links. Multi-day events are represented on every applicable day in the displayed month.
Access control: calendar data is selected in the current visitor's Joomla and JEM access context. A visitor who cannot open an event is not given its protected event page; the corresponding event route can lead to the Joomla login page.
Current Compatibility
| JEM version | Status | Joomla | Documentation scope |
| JEM 5.0.1 |
Stable |
Joomla 5.x and 6.x |
Primary reference for the common Calendar Module options and examples. |
| JEM 5.0.2 Beta 1 |
Maintenance beta |
Joomla 5.x and 6.x |
Uses the same Calendar options and temporarily supports known legacy CSS filenames. |
| JEM 5.1.0 Beta 4 |
Development beta |
Joomla 5.x and 6.x |
Adds the development feature 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 Calendar Module must be installed and enabled.
- The module must be assigned to a visible template position and the required menu pages.
- Events must match the configured publication state, month, access level, category and venue filters.
- Joomla's Bootstrap tooltip/popover support and JavaScript assets must not be blocked by the template.
- The module position must provide enough width for seven day columns.
Create the Module
- Open System → Manage → Site Modules.
- Select New and choose JEM - Calendar Module.
- Enter the Joomla module title and choose a template position.
- Configure tooltip, calendar, event-selection and navigation options.
- Select an alternative layout if required.
- Set the Joomla menu assignment and access level.
- Publish and save the module.
Tooltip Options
| Option | Default | Purpose |
| Show Tooltips |
Yes |
Displays event information when visitors interact with an event day. |
| Show Tooltips Title |
Yes |
Adds a heading containing the event count and the configured singular or plural title. |
| Tooltips Title (Singular) |
Event |
Word used when a day contains one event. |
| Tooltips Title (Plural) |
Events |
Word used when a day contains multiple events. |
| Max. Events in Tooltip |
Empty |
Limits the event entries displayed in a tooltip. Empty means no explicit limit. |
| Max. Event Title Length |
25 |
Shortens event titles in the tooltip. A value of zero leaves titles uncut. |
| Display Link |
No |
Makes individual event titles inside the tooltip link to their event route. |
| Event block layout |
Default |
Selects the destination event layout: global/default, Details or Compact. The field is shown when Display Link is enabled and also influences generated direct event routes. |
| Venue block layout |
Default |
Selects the venue block used inside the destination event page: global/default, Details or Compact. |
| Display Time |
No |
Adds the event start and end time before the tooltip title. |
| Display Category |
No |
Appends the accessible event categories to the tooltip entry. |
| Display Venue |
No |
Appends the venue name to the tooltip entry. |
Tooltip example: enabling time, category and venue can produce an entry similar to 18:00-20:00 Workshop (Training) @Main Campus.
Tooltip Visibility Detail
If the tooltip title is disabled and the maximum event value resolves to zero, the supplied layouts disable tooltip output because neither a title nor event content would be available. When using tooltips, keep the title enabled or provide a positive event limit.
Calendar Display
| Option | Default | Purpose |
| Day Name Length |
2 |
Hides weekday names or displays one letter, two letters, three letters or the full translated name. |
| First Day of Week |
Monday |
Selects any weekday as the first column of the calendar. |
| Year Length |
Four digits |
Displays a two-digit or four-digit year in the calendar heading. |
| Short Month Name |
No |
Uses the translated short month name when enabled; otherwise, it uses the full month name. |
| Month Offset |
0 |
Moves the initially rendered month relative to the selected/current month. For example, 1 displays the following month and -1 the previous month. |
| Time Offset |
0 |
Adds an hour offset to the current date calculated in Joomla's configured timezone. It affects which day and month JEM considers current. |
Month Offset changes the displayed month. Time Offset changes the reference time used to calculate today. They solve different requirements.
Day Name Values
| Value | Output | Example |
| Do not display |
Weekday header cells remain visually empty. |
— |
| One letter |
First translated character. |
M |
| Two letters |
First two translated characters. |
Mo |
| Three letters |
First three translated characters. |
Mon |
| Full |
Complete translated weekday name. |
Monday |
Navigation and Event Selection
| Option | Default | Purpose |
| Remember Month/Year |
Yes |
Stores the selected month and year in the Joomla user session for this module instance. |
| Use AJAX |
Yes |
Updates the calendar module through Joomla com_ajax without reloading the complete page. Normal links remain the no-JavaScript fallback. |
| Current Events |
Yes |
Includes events in the normal published state. |
| Archived Events |
No |
Includes events in the JEM archived state. |
| Categories |
Empty |
Restricts the month to selected JEM categories. Empty means no category restriction. |
| Venues |
Empty |
Restricts the month to selected JEM venues. Empty means no venue restriction. |
| Straight To Details |
Yes |
Links a day directly to its event when exactly one event is present. Days with multiple events use the filtered JEM day view. |
| Default Menu ItemID |
Empty |
Forces generated day and event links to use a specific Joomla menu item ID. |
Event-state configuration: select Current Events, Archived Events or both. Setting both to No is ambiguous: the shared event model can fall back to published events instead of producing an explicitly empty state.
Current and Archived Combinations
| Current | Archived | Intended result |
| Yes |
No |
Normal published events for the displayed month. |
| No |
Yes |
Archived events whose dates overlap the displayed month. |
| Yes |
Yes |
Published and archived events together. |
| No |
No |
Avoid this configuration; no explicit event state is selected and fallback behaviour can apply. |
Link Routing
Leave Default Menu ItemID empty unless generated links use the wrong template style, module assignment, breadcrumb or SEF context. When a fixed item ID is required, enter the numeric ID of the appropriate published JEM menu item.
Category and venue filters are forwarded to the JEM day view, so a multi-event day continues to represent the same filtered calendar context.
How Tooltip and Day-link Options Work Together
The result depends on several options at once. In particular, Display Link controls links inside the tooltip, while Straight To Details controls the route assigned to the calendar day.
| Combination | Default / Darkblue | Grid | Recommended use |
Tooltips: No Straight To Details: Yes |
An event day is a normal link. One event opens its event page; multiple events open the filtered day view. |
Fast navigation without preview content. |
Tooltips: No Straight To Details: No |
Every event day opens the filtered JEM day view, including days containing one event. |
Consistent calendar-to-day workflow. |
Tooltips: Yes Display Link: No |
The day tooltip shows plain event information and retains the generated day/event destination. |
Clicking the day toggles a popover. Event titles are plain text, so the popover is informational and provides no event-title link. |
Read-only preview, especially useful when navigation is intentionally not required. |
Tooltips: Yes Display Link: Yes |
The tooltip contains individual event links and the day uses its generated destination. |
Clicking the day opens the popover; visitors then use the linked event titles inside it. |
Recommended Grid configuration when visitors must open events. |
Tooltip Title: Yes Max. Events: 0 |
The tooltip can show only its event-count heading; individual event lines are suppressed. |
Compact availability indicator without listing titles. |
Tooltip Title: No Max. Events: 0 |
The supplied layout disables the empty tooltip and renders the event day using the normal non-tooltip link. |
Equivalent to navigation without tooltip content. |
Tooltip Title: Any Max. Events: Empty |
All matching event entries are included in the tooltip/popover. |
Low-volume calendars. |
Tooltips: Yes Max. Events: positive number |
Only that number of entries is shown; an ellipsis indicates that further events exist. |
Busy calendars and narrow module positions. |
How Month Options Work Together
- Remember Month/Year stores the visitor's selected base month for this individual module ID.
- Month Offset is then applied to that base month every time the calendar is rendered.
- With Month Offset
0, selecting the calendar heading returns to the actual current month.
- With a non-zero Month Offset, the offset is reapplied after the heading resets the base month. For example, an offset of
1 returns to next month, not the current month.
- For a normally navigable public calendar, use Month Offset
0. Use a non-zero value when the module deliberately needs to open relative to another month.
Module Text
| Option | Default | Purpose |
| Show intro text |
No |
Displays configured content above the calendar. |
| Intro text |
Empty |
Safe HTML rendered above the complete module output. |
| Show footer text |
No |
Displays configured content below the calendar. |
| Footer text |
Empty |
Safe HTML rendered below the complete module output. |
During an AJAX month update, JEM returns only the calendar layout. Intro and footer text are deliberately omitted from the AJAX fragment so they are not duplicated.
Advanced Options
| Option | Default | Purpose |
| Alternative Layout |
Default |
Selects a supplied Calendar layout or a compatible template override. |
| Module Class |
Empty |
Adds custom CSS classes to the Joomla module wrapper. |
| Caching |
Use Global |
Uses or disables Joomla module caching. |
| Cache Time |
900 |
Number of seconds before the cached module result is refreshed. |
Supplied Layouts
| Layout | Structure | Navigation and use |
default |
Compact HTML table calendar using the standard JEM colours. |
Previous/next month, previous/next year and current-month link. Suitable for most sidebars. |
darkblue |
HTML table calendar with a darker supplied visual theme. |
Uses the same navigation and event behaviour as Default. |
grid |
Responsive list/grid calendar with Bootstrap popovers. |
Shows previous/next month and current-month navigation. Year arrows are not rendered by the supplied Grid layout. |
Layout Comparison
| Feature | Default | Darkblue | Grid |
| Calendar structure |
Table |
Table |
CSS grid/lists |
| Previous/next month |
Yes |
Yes |
Yes |
| Previous/next year |
Yes |
Yes |
No |
| Heading reset link |
Current base month plus Month Offset |
Current base month plus Month Offset |
Current base month plus Month Offset |
| AJAX navigation |
Yes |
Yes |
Yes |
| Event interaction with tooltips |
Joomla tooltip on routed day |
Joomla tooltip on routed day |
Click-operated Bootstrap popover |
| Navigation from tooltip content |
Display Link adds event-title links |
Display Link adds event-title links |
Display Link is required for event-title links in the popover |
| Best use |
Standard compact calendar |
Dark template sections |
Modern responsive areas |
Frontend Behaviour
- The module displays one month at a time and highlights days containing matching events.
- Multi-day events appear on every day covered by their start and end dates within the displayed month.
- Events on the same day are ordered by their stored time.
- Straight To Details applies only when the final day contains exactly one event; otherwise, the day view is used.
- When AJAX is enabled, navigation requests only the selected module instance through Joomla
com_ajax.
- Without JavaScript, the supplied layouts use normal navigation links and reload the page.
- Remember Month/Year is stored per module ID, allowing multiple Calendar instances to retain independent navigation states.
- Module caching can delay calendar or access changes until the configured cache expires.
PHP Layout Overrides
Use Joomla's module override system instead of changing JEM core files:
templates/YOUR_TEMPLATE/html/mod_jem_cal/default.php
templates/YOUR_TEMPLATE/html/mod_jem_cal/grid.php
templates/YOUR_TEMPLATE/html/mod_jem_cal/my-calendar.php
- Copy the closest supplied layout from
modules/mod_jem_cal/tmpl/.
- Place it in
templates/YOUR_TEMPLATE/html/mod_jem_cal/.
- Use a new basename when the custom version should be selectable independently.
- Reopen the module editor and select it under Alternative Layout.
- When changing AJAX markup, preserve the module-specific IDs and navigation callback behaviour.
CSS Overrides
Use a stylesheet whose basename matches the selected layout:
templates/YOUR_TEMPLATE/css/mod_jem_cal/default.css
templates/YOUR_TEMPLATE/css/mod_jem_cal/darkblue.css
templates/YOUR_TEMPLATE/css/mod_jem_cal/grid.css
CSS Resolution Order
templates/YOUR_TEMPLATE/css/mod_jem_cal/LAYOUT.css
templates/YOUR_TEMPLATE/html/mod_jem_cal/LAYOUT.css
media/mod_jem_cal/css/LAYOUT.css
modules/mod_jem_cal/tmpl/LAYOUT.css
The first matching file replaces the supplied Calendar stylesheet for that basename. Copy the supplied CSS first when you want to keep the original rules and adjust only selected declarations.
Additive JEM Module CSS
For small rules that should load after the module stylesheet and can be shared with other JEM modules, use:
media/com_jem/css/custom/jem-user-module.css
This file is additive. A layout-specific template CSS file is a replacement for the supplied stylesheet with the same basename.
Legacy CSS Filenames in JEM 5.0.2 Beta 1
JEM 5.0.1 already supports the current paths and filenames documented above. JEM 5.0.2 Beta 1 additionally provides temporary compatibility for these old Calendar filenames:
| Legacy filename | Current filename |
mod_jem_cal.css |
default.css |
mod_jem_cal_darkblue.css |
darkblue.css |
mod_jem_cal_grid.css |
grid.css |
Recommended action: rename or copy a legacy override to its current filename only after checking that an existing destination will not be overwritten. The compatibility fallback is transitional.
Configuration Examples
- Show Tooltips: Yes
- Max. Events in Tooltip: 5
- Display Link: Yes
- Use AJAX: Yes
- Current Events: Yes
- Archived Events: No
- Straight To Details: Yes
- Alternative Layout: default
Visitors can preview events and use either a linked tooltip title or the routed calendar day.
- Categories: Courses and workshops
- Show Tooltips: Yes
- Display Link: Yes
- Display Time: Yes
- Display Category: No
- Display Venue: Yes
- Day Name Length: 3
- First Day of Week: Monday
- Alternative Layout: grid
In Grid, Display Link provides the event links inside the click-operated popover.
- Venues: Select the target venue
- Show Tooltips: No
- Tooltip detail options: Not applicable while tooltips are disabled
- Straight To Details: Yes
- Default Menu ItemID: Venue-section JEM item ID, if required
- Show intro text: Yes
- Intro text: Events at this venue
Because tooltips are disabled, visitors navigate directly through the day number. Tooltip content options have no visible effect.
- Current Events: No
- Archived Events: Yes
- Month Offset: Negative value if a past month should open first
- Remember Month/Year: Yes
- Use AJAX: Yes
- Alternative Layout: darkblue
Only archived events are selected; the remembered month makes historical browsing easier.
- Month Offset: 0
- Time Offset: Enter the required difference in hours
- Display Time: Yes
- Current Events: Yes
- Remember Month/Year: No
Use this only for a deliberate audience offset. Configure the correct Joomla timezone first.
- Show Tooltips: Yes
- Show Tooltips Title: Yes
- Max. Events in Tooltip: 0
- Display Link: No
- Display Time / Category / Venue: No
- Alternative Layout: grid
Clicking an event day displays only the event-count heading. This is useful as a compact availability indicator, not as event navigation.
- Show Tooltips: No
- Straight To Details: No
- Current Events: Yes
- Archived Events: Optional
- Categories / Venues: Select as required
- Alternative Layout: default or grid
Every active day opens the filtered day list, even when it contains only one event.
- Month Offset: 1
- Remember Month/Year: No
- Use AJAX: Optional
- Current Events: Yes
- Archived Events: No
- Show Tooltips: Yes
The offset is reapplied during navigation. Use a separate normal calendar when visitors also need an unshifted current-month view.
Troubleshooting
| Problem | Likely cause | Checks |
| No event days are highlighted. |
No matching dates, state, access, category or venue. |
Check event dates, publication state, access, Current/Archived Events and both filters. |
| Archived events are missing. |
Archived Events is disabled or the events do not overlap the selected month. |
Enable Archived Events and navigate to the event month. |
| A day opens the day view instead of an event. |
The day has multiple matching events or Straight To Details is disabled. |
Inspect the tooltip entries and enable Straight To Details if required. |
| Links use the wrong template or modules. |
Joomla resolved another menu item for the generated route. |
Set Default Menu ItemID to the appropriate published JEM menu item. |
| Tooltips are too tall. |
Many events or long titles are displayed. |
Set Max. Events in Tooltip and reduce Max. Event Title Length. |
| Tooltips do not appear. |
Tooltip output is disabled, both tooltip content controls resolve empty, or JavaScript conflicts exist. |
Enable Show Tooltips and its title or content; then test a supplied layout and check the browser console. |
| AJAX navigation fails. |
JavaScript error, template conflict, blocked com_ajax request or incompatible override. |
Disable AJAX to verify normal links, inspect the network request and compare with a supplied layout. |
| The wrong month opens. |
Month Offset or the remembered per-module session state is active. |
Set Month Offset to zero and use the calendar heading to return to the current month. |
| Today is highlighted incorrectly. |
Joomla timezone or Time Offset does not match the intended audience. |
Correct Joomla's timezone first, then use Time Offset only when deliberately required. |
| A CSS override is ignored. |
Wrong active template, directory, layout basename, filename case or cached CSS. |
Confirm templates/TEMPLATE/css/mod_jem_cal/LAYOUT.css and clear Joomla, browser and optimisation caches. |
| Changes appear late. |
Module, Joomla, template, CDN or browser caching. |
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 to the Calendar Module. It controls which hierarchy levels can mark days and appear in tooltips:
| Value | Behaviour |
| Calendar default |
Uses JEM's normal calendar hierarchy policy, including each event's calendar visibility setting. |
| Parent events only |
Shows top-level events and excludes their child programme items. |
| Subevents only |
Shows programme items and excludes their parent events. |
| Parent events and subevents |
Includes both hierarchy levels in the calendar result. |
- Event hierarchy: Subevents only
- Categories: Conference programme
- Show Tooltips: Yes
- Display Time: Yes
- Display Link: Yes
- Straight To Details: Yes
- Alternative Layout: grid
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 Calendar overrides and offers an explicit migration. It does not overwrite an existing destination and reports conflicts or unwritable paths.
Related Documentation
GitHub References