Hallo,
mit folgenden Sachen kann man nur die wiederholenden Events als Liste ausgeben oder ausschließen, ohne dafür eine Erweiterung installieren zu müssen. Hier ist die Dokumentation für den getAllEvents-Hook.
Ich habe mir zwei Dateien angelegt
1. unter contao/dca/tl_module.php
PHP-Code:
<?php
use Contao\CoreBundle\DataContainer\PaletteManipulator;
// Beschreibung der Felder
$GLOBALS['TL_DCA']['tl_module']['fields']['events_filter'] = array(
'label' => &$GLOBALS['TL_LANG']['tl_module']['events_filter'],
'default' => 'all_events',
'exclude' => true,
'inputType' => 'select',
'options' => array('all_events', 'onlyRecurringEvents', 'noRecurringEvents'),
'reference' => &$GLOBALS['TL_LANG']['tl_module'],
'eval' => array('tl_class' => 'w50'),
'sql' => [
'type' => 'string',
'length' => 50, // Must be large enough to store all possible options
'default' => '',
],
);
PaletteManipulator::create()
->addField('events_filter', 'cal_hideRunning', PaletteManipulator::POSITION_AFTER)
->applyToPalette('eventlist', 'tl_module');
2. und dann eine Datei für den Hook unter src/EventListener/GetAllEventsListener.php angelegt.
Hier der funktionierende Code
PHP-Code:
<?php
namespace App\EventListener;
use Contao\CoreBundle\DependencyInjection\Attribute\AsHook;
use Contao\Module;
#[AsHook('getAllEvents')]
class GetAllEventsListener
{
public function __invoke(array $arrEvents, array $calendars, int $timeStart, int $timeEnd, Module $module): array
{
foreach ($arrEvents as $key => $days) {
foreach ($days as $day => $events) {
foreach ($events as $arrCol => $event) {
// only recurring events
if ($module->events_filter == 'onlyRecurringEvents') {
if (empty($event['recurring'])) {
unset($arrEvents[$key][$day][$arrCol]);
};
}
// without recurring events
if ($module->events_filter == 'noRecurringEvents') {
if (!empty($event['recurring'])) {
unset($arrEvents[$key][$day][$arrCol]);
};
}
}
}
}
return $arrEvents;
}
}
3. Sprachdatei unter contao/languages/de/tl_module.php
PHP-Code:
<?php
$GLOBALS['TL_LANG']['tl_module']['events_filter'] = array('Events filtern (z.B. Wiederholende Events)', 'Hier kannst du Events zusätzlich filtern. Z.B. wiederholende Events');
$GLOBALS['TL_LANG']['tl_module']['all_events'] = 'Alle Events zeigen';
$GLOBALS['TL_LANG']['tl_module']['onlyRecurringEvents'] = 'Nur wiederholende Events zeigen';
$GLOBALS['TL_LANG']['tl_module']['noRecurringEvents'] = 'Keine wiederholenden Events zeigen';