- SitemapListener: <lastmod> for event detail pages (event tstamp) and
regular pages; events that ended more than 12 months ago are removed
from the sitemap
- PastEventPolicy: events stay indexable for 12 months after they end
(recurring events are searched before the next date), afterwards the
detail page gets noindex,follow but stays reachable as archive
- detail template data: is_past and next_occurrence (next published
event with the same title) for a notice with a link to the next date
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- event detail pages: <title> is "Title – 03.12.2026" (multi-day ranges
supported) so recurring events with the same name stay distinguishable;
H1 and lists keep the editor's title
- meta description fallback for events without teaser/description (date,
time, location); a teaser that is only an insert tag (shared series
text) also falls back, so a series does not share one description
- EventOpenGraphProvider for numero2/contao-opengraph3 (registered only
when the bundle is installed, priority above its CalendarEventsProvider):
og:title with date, og:description from teaser, event image as og:image
- FrontendCacheInvalidator: frontend event/organization edits write via
DBAL, so invalidate the same cache tags the backend uses; tag the map
and organization listing, invalidate the generic organization tag on
backend saves
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Events with a URL were saved with source "external", so Contao linked
lists straight to the external site and redirected the detail page.
The URL is now kept in the url field and only shown as a button on the
detail page.
- frontend form saves source "default" for every event
- backend: source option "external" removed, url field relabelled
"Externer Link", obsolete target field dropped from the palette
- migration switches existing source="external" events to "default"
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The event detail template data set has_tag_21 to drive the
Kulturhauptdorf logo, but tag 21 is "Feste & Märkte", so the logo
showed on every market/festival event. Add is_kulturhauptdorf, which
checks for a tag named "Kulturhauptdorf" (case-insensitive), and keep
has_tag_21 as deprecated for backwards compatibility.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>