Ergebnis 1 bis 1 von 1

Thema: Nur wiederholende Events als Liste ausgeben bzw. ausschließen (getAllEvents-Hook)

  1. #1
    Contao-Fan Avatar von jenda
    Registriert seit
    20.06.2009.
    Ort
    Berlin
    Beiträge
    494

    Standard Nur wiederholende Events als Liste ausgeben bzw. ausschließen (getAllEvents-Hook)

    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 $calendarsint $timeStartint $timeEndModule $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';
    Geändert von jenda (24.04.2024 um 09:51 Uhr)

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •