From e3cc85115b124c59315dd4d460c6a307b2176248 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=BCrgen=20Mummert?= Date: Sun, 22 Feb 2026 11:27:26 +0100 Subject: [PATCH] Add configurable target event list ID for event filter module --- contao/dca/tl_module.php | 39 +++- contao/languages/de/tl_module.php | 1 + contao/languages/en/tl_module.php | 1 + .../templates/frontend/event_filter.html.twig | 183 +++++++++++++++++- .../Frontend/EventFilterController.php | 2 + 5 files changed, 223 insertions(+), 3 deletions(-) diff --git a/contao/dca/tl_module.php b/contao/dca/tl_module.php index 54ee83a..551edd9 100644 --- a/contao/dca/tl_module.php +++ b/contao/dca/tl_module.php @@ -7,7 +7,7 @@ use Contao\StringUtil; $GLOBALS['TL_DCA']['tl_module']['palettes']['member_organizations'] = '{title_legend},name,headline,type;{eventmanager_legend},editPage;{protected_legend:hide},protected;{expert_legend:hide},guests,cssID'; $GLOBALS['TL_DCA']['tl_module']['palettes']['member_events'] = '{title_legend},name,headline,type;{eventmanager_legend},editPage;{protected_legend:hide},protected;{expert_legend:hide},guests,cssID'; -$GLOBALS['TL_DCA']['tl_module']['palettes']['event_filter'] = '{title_legend},name,headline,type;{eventmanager_legend},cal_calendar;{protected_legend:hide},protected;{expert_legend:hide},guests,cssID'; +$GLOBALS['TL_DCA']['tl_module']['palettes']['event_filter'] = '{title_legend},name,headline,type;{eventmanager_legend},cal_calendar,eventListDomId;{protected_legend:hide},protected;{expert_legend:hide},guests,cssID'; $GLOBALS['TL_DCA']['tl_module']['palettes']['organization_edit'] = '{title_legend},name,headline,type;{eventmanager_legend},listPage,logoFolder,organizationTypeTags;{protected_legend:hide},protected;{expert_legend:hide},guests,cssID'; $GLOBALS['TL_DCA']['tl_module']['palettes']['event_edit'] = '{title_legend},name,headline,type;{eventmanager_legend},listPage,eventFolder,termsPage,frontendAuthorId,frontendArchiveId,eventTypeTags;{protected_legend:hide},protected;{expert_legend:hide},guests,cssID'; @@ -120,3 +120,40 @@ $GLOBALS['TL_DCA']['tl_module']['fields']['eventTypeTags'] = [ }, ], ]; + +$GLOBALS['TL_DCA']['tl_module']['fields']['eventListDomId'] = [ + 'label' => &$GLOBALS['TL_LANG']['tl_module']['eventListDomId'], + 'exclude' => true, + 'inputType' => 'select', + 'options_callback' => static function (): array { + $rows = Database::getInstance() + ->prepare('SELECT id, name, cssID FROM tl_module WHERE type=? ORDER BY name ASC, id ASC') + ->execute('eventlist') + ->fetchAllAssoc(); + + $options = []; + + foreach ($rows as $row) { + $moduleId = (int) ($row['id'] ?? 0); + + if ($moduleId <= 0) { + continue; + } + + $cssId = StringUtil::deserialize($row['cssID'] ?? null, true); + $domId = trim((string) ($cssId[0] ?? '')); + $domId = '' !== $domId ? $domId : sprintf('mod_eventlist_%d', $moduleId); + $moduleName = trim((string) ($row['name'] ?? '')); + + if ('' === $moduleName) { + $moduleName = sprintf('Eventliste %d', $moduleId); + } + + $options[$domId] = sprintf('%s [%s]', $moduleName, $domId); + } + + return $options; + }, + 'eval' => ['includeBlankOption' => true, 'chosen' => true, 'tl_class' => 'w50'], + 'sql' => ['type' => 'string', 'length' => 128, 'default' => ''], +]; diff --git a/contao/languages/de/tl_module.php b/contao/languages/de/tl_module.php index 7da9b6b..05ea239 100644 --- a/contao/languages/de/tl_module.php +++ b/contao/languages/de/tl_module.php @@ -10,5 +10,6 @@ $GLOBALS['TL_LANG']['tl_module']['eventFolder'] = ['Event-Ordner', 'Bitte wähle $GLOBALS['TL_LANG']['tl_module']['termsPage'] = ['Seite mit Nutzungsbedingungen', 'Optional: Seite mit den Nutzungsbedingungen, die im Frontend beim Zustimmungs-Label verlinkt wird.']; $GLOBALS['TL_LANG']['tl_module']['frontendAuthorId'] = ['Backend Benutzer ID', 'ID des Backend-Benutzers, der als Autor für frontendseitig angelegte Events gesetzt wird.']; $GLOBALS['TL_LANG']['tl_module']['frontendArchiveId'] = ['ID des Newsarchivs', 'Archiv-ID (pid), in das frontendseitig angelegte Events gespeichert werden.']; +$GLOBALS['TL_LANG']['tl_module']['eventListDomId'] = ['Eventlisten-ID (DOM)', 'Wählen Sie die ID der Eventliste, die durch das Event-Filter-Modul gefiltert werden soll.']; $GLOBALS['TL_LANG']['tl_module']['organizationTypeTags'] = ['Anzuzeigende Organisationstypen', 'Optional: Begrenzen Sie die im Frontend anzeigbaren Organisationstyp-Tags. Leer = alle.']; $GLOBALS['TL_LANG']['tl_module']['eventTypeTags'] = ['Anzuzeigende Veranstaltungstypen', 'Optional: Begrenzen Sie die im Frontend anzeigbaren Veranstaltungstyp-Tags. Leer = alle.']; diff --git a/contao/languages/en/tl_module.php b/contao/languages/en/tl_module.php index 277d96e..e70d55f 100644 --- a/contao/languages/en/tl_module.php +++ b/contao/languages/en/tl_module.php @@ -10,5 +10,6 @@ $GLOBALS['TL_LANG']['tl_module']['eventFolder'] = ['Event folder', 'Please selec $GLOBALS['TL_LANG']['tl_module']['termsPage'] = ['Terms page', 'Optional: page containing the terms of use linked from the frontend consent label.']; $GLOBALS['TL_LANG']['tl_module']['frontendAuthorId'] = ['Backend user ID', 'Backend user ID that should be set as author for events created from the frontend.']; $GLOBALS['TL_LANG']['tl_module']['frontendArchiveId'] = ['News archive ID', 'Archive ID (pid) where events created from the frontend should be stored.']; +$GLOBALS['TL_LANG']['tl_module']['eventListDomId'] = ['Event list ID (DOM)', 'Select the event list ID that should be filtered by the event filter module.']; $GLOBALS['TL_LANG']['tl_module']['organizationTypeTags'] = ['Displayed organization types', 'Optional: Limit which organization type tags can be selected in the frontend. Empty = all.']; $GLOBALS['TL_LANG']['tl_module']['eventTypeTags'] = ['Displayed event types', 'Optional: Limit which event type tags can be selected in the frontend. Empty = all.']; diff --git a/contao/templates/frontend/event_filter.html.twig b/contao/templates/frontend/event_filter.html.twig index 0958379..5a265a4 100644 --- a/contao/templates/frontend/event_filter.html.twig +++ b/contao/templates/frontend/event_filter.html.twig @@ -1,5 +1,5 @@ -
- +
+ {% for tag in tagButtons|default([]) %} @@ -25,3 +25,182 @@
+ + + + diff --git a/src/Controller/Frontend/EventFilterController.php b/src/Controller/Frontend/EventFilterController.php index c3134a9..1fabfe1 100644 --- a/src/Controller/Frontend/EventFilterController.php +++ b/src/Controller/Frontend/EventFilterController.php @@ -27,10 +27,12 @@ class EventFilterController extends AbstractFrontendModuleController { $calendarIds = array_map('intval', StringUtil::deserialize($model->cal_calendar, true)); $eventIds = $this->findUpcomingEventIds($calendarIds); + $targetEventListId = trim((string) ($model->eventListDomId ?? '')); $template->set('tagButtons', $this->findTagButtons($eventIds)); $template->set('locations', $this->findLocations($eventIds)); $template->set('organizations', $this->findOrganizations($eventIds)); + $template->set('targetEventListId', '' !== $targetEventListId ? $targetEventListId : 'eventlist'); return $template->getResponse(); }