Contao extension [mae_event_categories]

Kategorien verwalten
Kategorien verwalten

Wenn Sie viele Veranstaltungen im System haben, die über Veranstaltungsarchive nicht ausreichend gruppiert werden können, bietet diese Erweiterung zusätzliche Kategorien zum Filtern im eventlist Frontendmodul sowohl über das Backend, als auch über ein Kategoriefilter Frontendmodul.

mae_event_categories fügt dem Eventmodul eine neue, globale Operation hinzu, die die Definition einer nicht-hierarchischen Kategorienliste erlaubt.
Einer Veranstaltung können beliebig viele Kategorien zugewiesen werden.
Die Module Veranstaltungsliste, Kalender und Eventmenü werden dahingehend erweitert, dass bei Bedarf nur bestimmte Kategorien von Veranstaltungen aufgelistet werden.
Der Zugriff auf die Kategorieverwaltung kann über Berechtigungen gesteuert werden.

Der getAllEvents hook wird verwendet, um die betreffenden Veranstaltungen zu filtern.
Veranstaltungslisten, bei denen keine Kategorien ausgewählt werden, verhalten sich wie im Contao-Standard üblich.

Das nachfolgende Beispiel zeigt die ein Eventlisten-modul mit zugehörigem Kategoriefilter.

Beispiel Event List

(Sonntag)
(Montag)
(Dienstag)

Beispiel Kategoriefilter

Kategoriefiltermodul

Modul - Event - Kategoriefilter
Moduleinstellungen

Seit der Version 1.1 gibt es ein zusätzliches Modul "Event Kategoriefilter" im Bereich "Events", das es dem Besucher erlaubt, eine Eventliste selbst nach bestimmten Kategorien zu filtern. Üblicherweise wird dieses Modul in der Seitenleiste neben der Eventliste platziert. Die Konfiguration des Moduls gestaltet sich wie folgt:

  • Eventliste
    Optionale Angabe der Eventliste, die gefiltert werden soll. Falls am Listenmodul eine Kategorieauswahl konfiguriert ist, wird das Filtermodul diese Auswahl für sich übernehmen.
  • Eventkategorien
    Hier kann dem Filtermodul optional eine feste Liste von filterbaren Kategorien zugewiesen werden und deren Reihenfolge festgelegt werden. Die Kategorieauswahl des Listenmoduls wird in diesem Fall ignoriert.
  • Filter URL Parameter
    Ab der Version 1.4.0 RC1 vom 29.04.2016 kann der GET-Parameter zum Filtern der Kategorien nun selbst bestimmt werden. Zusätzlich wurde an der Kategorie noch ein Aliasfeld hinzugefügt, damit die komplette Filter-URL auf die eigenen Wünsche angepasst werden kann.
  • Nur Kategorien aus zukünftigen Events auflisten
    Ab der Version 1.5.0 kann mit dieser Option eingestellt werden, dass nur nach Kategorien gefiltert werden kann, die tatsächlich einem zukünftigen Event zugeordnet sind. Dabei spielt es keine Rolle, in welchem Archiv sich das Event befindet. Es handelt sich hier um eine einfache Abfrage über alle existierenden Events.

Falls weder am Listenmodul, noch am Filtermodul Kategorien ausgewählt werden, werden dem Besucher alle vorhandenen Kategorien zur Auswahl angeboten. Um die Darstellung der Kategorien im Filtermodul flexibel zu gestalten, können nun an der Kategorie CSS ID/Klasse(n) definiert werden.

Kategorien im Frontend anzeigen

um die, einer Veranstaltung zugewiesenen Kategorien in der Veranstaltungsliste, bzw. den Veranstaltungsdetails im Frontend anzuzeigen, kann man die diversen Contao-Templates für Veranstaltungen (event_*) wie im nachfolgenden Beispiel beschrieben anpassen.
In der vorherigen Version der Doku war bis zum 14. April 2016 ein Fehler. Den ich jetzt behoben habe.
Das folgende Beispiel zeigt das Standard-Template "event_teaser.html5" aus Contao 3.5.0, in das ich die Zeilen 19-33 eingefügt habe:

<?php if ($this->header): ?>
  <div class="header<?= $this->classHeader ?>">
    <span class="date"><?= $this->firstDate ?></span><?php if ($this->firstDay): ?> <span class="day">(<?= $this->firstDay ?>)</span><?php endif; ?>
  </div>
<?php endif; ?>

<div class="event layout_teaser<?= $this->classList ?>">

  <?php if ($this->details): ?>
    <h2><a href="<?= $this->href ?>" title="<?= $this->title ?> (<?php if ($this->day) echo $this->day . ', '; ?><?= $this->date ?><?php if ($this->time) echo ', ' . $this->time; ?>)"<?= $this->target ?>><?= $this->link ?></a></h2>
  <?php else: ?>
    <h2><?= $this->title ?></h2>
  <?php endif; ?>

  <?php if ($this->time || $this->span): ?>
    <p class="time"><?= $this->time . $this->span ?></p>
  <?php endif; ?>

  <!-- ab hier folgt der ergänzende Code zur Anzeige der Kategorien -->
  <?php if ($this->categories): ?>
    <div class="categories">
        <ul>
        <?php
            $cat_ar = deserialize($this->categories, true);
            foreach ($cat_ar as $cat_id) {
                $objCat = Database::getInstance()->prepare("SELECT title FROM tl_mae_event_cat WHERE id = ? LIMIT 1")->execute($cat_id);
                echo "<li>" . $objCat->title . "</li>";
            }
        ?>
        </ul>
    </div>
  <?php endif; ?>
    <!-- hier endet der ergänzende Code zur Anzeige der Kategorien -->

  <div class="teaser">
    <?= $this->teaser ?>
  </div>

  <?php if ($this->details): ?>
    <p class="more"><a href="<?= $this->href ?>" title="<?= $this->readMore ?>"<?= $this->target ?>><?= $this->more ?> <span class="invisible"><?= $this->link ?></span></a></p>
  <?php endif; ?>

</div>