Contao-Camp 2024
Ergebnis 1 bis 11 von 11

Thema: getAllEvents Hook - CSS Klassen ergänzen nach DB-Abfrage

  1. #1
    Contao-Nutzer
    Registriert seit
    12.04.2018.
    Beiträge
    8

    Frage getAllEvents Hook - CSS Klassen ergänzen nach DB-Abfrage

    Hallo zusammen,

    ich komme leider einfach nicht weiter. Ich habe mir die Contao Doku zu den Hooks durchgelesen und dazu unzählige Forenbeiträge.

    Folgendes möchte ich lösen: Ich nutze calendar-event-booking-bundle für Buchungen. Leider wird in der Eventliste keine Information zur Verfügung gestellt, ob ein Event schon ausgebucht wurde. Ich möchte in der Datenbank die Einträge in tl_calendar_events_member anhand der PID zählen und mit der maximalen Anzahl abgleichen. Leider habe ich nur Grundkenntnisse in PHP und bin nicht routiniert genug und kenne auch die Contaoentwicklung nicht gut genug, weswegen elegantere Möglichkeiten für mich an dieser Stelle wegfallen.

    Für die Realisierung wollte ich den getAllEvents Hook nutzen. Dafür habe ich mich an der Dokumentation entlang gehangelt:

    /src/EventListener/myClass.php
    HTML-Code:
    <?php
    // src/EventListener/myClass.php
    namespace App\EventListener;
    
    use Contao\CoreBundle\ServiceAnnotation\Hook;
    use Contao\Module;
    use Contao\Database;
    
    /**
     * @Hook("getAllEvents")
     */
     
    class myClass{
        public function __invoke(array $events, array $calendars, int $timeStart, int $timeEnd, Module $module): array
        {
            // Add events to $events or modify the array …
            return $events;
        }
    }
    
    ?>
    (Hier ist das Beispiel aus der Doku ohne meine Verzweiflungstaten)

    composer.json
    Code:
    {
        "type": "project",
        "require": {
            "contao/calendar-bundle": "4.9.*",
            "contao/comments-bundle": "4.9.*",
            "contao/conflicts": "*@dev",
            "contao/faq-bundle": "4.9.*",
            "contao/listing-bundle": "4.9.*",
            "contao/manager-bundle": "4.9.*",
            "contao/news-bundle": "4.9.*",
            "contao/newsletter-bundle": "4.9.*",
            "do-while/contao-backupdb-bundle": "^1.4",
            "erdmannfreunde/onepage-navigation": "^1.1",
            "heimrichhannot/contao-speed-bundle": "^1.9",
            "heimseiten/contao-inviewport-bundle": "^1.0",
            "heimseiten/contao-parallax-bundle": "^1.0",
            "heimseiten/contao-universal-toggler-bundle": "^3.0",
            "kmielke/calendar-extended-bundle": "^1.0",
            "madeyourday/contao-rocksolid-custom-elements": "^2.3",
            "madeyourday/contao-rocksolid-slider": "^2.0",
            "markocupic/resource-booking-bundle": "^2.8",
            "oveleon/contao-cookiebar": "^1.8",
            "terminal42/contao-leads": "^1.4",
            "terminal42/contao-node": "^1.4",
            "terminal42/notification_center": "^1.5"
        },
        "extra": {
            "contao-component-dir": "assets"
        },
        "scripts": {
            "post-install-cmd": [
                "Contao\\ManagerBundle\\Composer\\ScriptHandler::initializeApplication"
            ],
            "post-update-cmd": [
                "Contao\\ManagerBundle\\Composer\\ScriptHandler::initializeApplication"
            ]
        },
    	"autoload": {
            "psr-4": {
                "App\\": "src/"
            }
        }
    }
    Laut
    Code:
    vendor/bin/contao-console debug:container App\\EventListener\\myClass
    wird mein Service auch registriert - wenn ich das richtig verstanden habe.

    Mein Problem ist, dass ich keine Vorstellung davon habe, womit ich arbeiten kann und wie ich auf die einzelnen Arrays zugreifen kann. Ein var_dump oder print_r funktioniert ja nicht, weil ein Array zurück gegeben werden muss, oder? Ich weiß also nicht, wie ich zB an die ID eines Events komme oder an das Feld für die CSS Klasse, weil ich die Verschachtelung des Arrays nicht kenne und nicht weiß, wo ich diese Informationen finde

    Versucht habe ich
    Code:
    $events->id
    $events->cssClass
    $events['class']
    Oder habe ich einen Denkfehler: Mein Ansatz war, dass ich die neue CSS Klasse auch direkt im Frontend sehen müsste, sobald ich sie im Hook ergänze (wie oben versucht). Fehlt mir ein Zwischenschritt über das Template?

    Ich sitze da jetzt mehrere Stunden dran und komme keinen Schritt weiter und bin für jeden Hinweis dankbar.

    Liebe Grüße
    ness
    Geändert von nessbess (24.06.2021 um 16:31 Uhr)

  2. #2
    Contao-Fan Avatar von markocupic
    Registriert seit
    06.12.2010.
    Ort
    Oberkirch (Schweiz)
    Beiträge
    660

    Standard

    @nessbess
    I think there is a solution!

    1. Upgrade markocupic/calendar-event-booking-bundle at least to version 4.1.0.
    2. Run the database installtool.
    3. Then check https://github.com/markocupic/calend...late-variablen
    Anfragen für bezahlten Support oder Extension-Programmierung via PN.

  3. #3
    Contao-Nutzer
    Registriert seit
    12.04.2018.
    Beiträge
    8

    Standard

    Zitat Zitat von markocupic Beitrag anzeigen
    @nessbess
    I think there is a solution!

    1. Upgrade markocupic/calendar-event-booking-bundle at least to version 4.1.0.
    2. Run the database installtool.
    3. Then check https://github.com/markocupic/calend...late-variablen
    Danke für die Antwort!

    Ich musste downgraden, da ich mit 4.1.0 einen Bug erhalte. Das Modul der Teilnehmerliste nutzt das Template mod_calendar_event_booking_unsubscribe_from_event_ module.html. Dafür nutzt das Modul Event-Stornierungsformular das Template calendar_event_booking_member_list_partial.html. Selbst wenn ich den Template-Inhalt austausche mit dem korrekten Template, erhalte ich keine Ausgabe im Frontend. Und die Abmeldefunktion funktionierte nicht. Der Bug tritt auch bei einem neu installierten Contao 4.9.16 auf.

    Ich ging davon aus, dass auch 4.1.0 die von mir gewünschte Funktionalität nicht hat, weswegen ich mir so herum helfen wollte. In der Doku muss ich die Templatevariablen wirklich übersehen haben

    Viele Grüße
    ness
    Angehängte Grafiken Angehängte Grafiken

  4. #4
    Contao-Fan Avatar von markocupic
    Registriert seit
    06.12.2010.
    Ort
    Oberkirch (Schweiz)
    Beiträge
    660

    Standard

    Was hast du denn für eine Fehlermeldung?
    Lg Marko
    Anfragen für bezahlten Support oder Extension-Programmierung via PN.

  5. #5
    Contao-Fan Avatar von markocupic
    Registriert seit
    06.12.2010.
    Ort
    Oberkirch (Schweiz)
    Beiträge
    660

    Standard

    Habe soeben alles unter Contao 4.9.16 und 4.11 durchgetestet. Läuft alles sauber durch (Formular, Teilnehmerliste und Unsubscribe).

    Bitte wechsle im Backend in den Debug-Modus und poste dann den Error Code, den du im Frontend beim Benutzen des Reservationstools erhältst. So wie jetzt, ist es etwas schwierig, dir zu helfen ;-)
    Lg Marko
    Anfragen für bezahlten Support oder Extension-Programmierung via PN.

  6. #6
    Contao-Nutzer
    Registriert seit
    12.04.2018.
    Beiträge
    8

    Standard

    Ich bekomme vom Modul für die Teilnehmerliste die Fehlermeldung "Ungültiges Buchungs-Token". Sonstige Fehlermeldungen (var/logs, System-Log, Debug-Modus) finde ich nicht.

    Nutze ich den Stornierungslink in der E-Mail, erhalte ich nur ein leeres Frontend - ohne Modul im HTML. Die Abmeldung wird nicht durchgeführt, der Teilnehmer also nicht ausgetragen. Die Abmelde-Seite habe ich im Kalendar als "Seite mit dem Event-Stornierungsformular-Modul wählen" angegeben. Im Event ist "Abmeldung von Event erlauben" angehakt. Eine Fehlermeldung erhalte ich leider nirgends.

    Zur Übersicht mein Seitenaufbau
    Seite Termine mit den Modulen:
    • Eventliste


    Seite Detail mit den Modulen:
    • Eventreader
    • Event-Buchungsformular
    • Teilnehmerliste


    Seite Abmelden mit den Modulen:
    • Event-Stornierungsformular

  7. #7
    Contao-Nutzer
    Registriert seit
    12.04.2018.
    Beiträge
    8

    Standard

    Zitat Zitat von markocupic Beitrag anzeigen
    Habe soeben alles unter Contao 4.9.16 und 4.11 durchgetestet. Läuft alles sauber durch (Formular, Teilnehmerliste und Unsubscribe).

    Bitte wechsle im Backend in den Debug-Modus und poste dann den Error Code, den du im Frontend beim Benutzen des Reservationstools erhältst. So wie jetzt, ist es etwas schwierig, dir zu helfen ;-)
    Lg Marko
    Das hatte sich überschnitten Wie gesagt, keine Fehlermeldungen im Debug. Ich weiß, Ferndiagnosen sind immer blöd, wenn sich der Fehler nicht reproduzieren lässt. Ich setze die Installation nochmal neu auf, um sicher zu gehen.

    LG ness

  8. #8
    Contao-Fan Avatar von markocupic
    Registriert seit
    06.12.2010.
    Ort
    Oberkirch (Schweiz)
    Beiträge
    660

    Standard

    Zitat Zitat von nessbess Beitrag anzeigen
    Ich bekomme vom Modul für die Teilnehmerliste die Fehlermeldung "Ungültiges Buchungs-Token". Sonstige Fehlermeldungen (var/logs, System-Log, Debug-Modus) finde ich nicht.
    Das kann nicht sein. Der Fehler "Ungültiges Buchungs-Token" stammt vom Stornierungsmodul. Der Fehler kommt, wenn du versuchst ohne/ungültigem Buchungstoken in der url eine Buchung zu stornieren.
    Du hast ziemlich sicher etwas falsch konfiguriert.
    Anfragen für bezahlten Support oder Extension-Programmierung via PN.

  9. #9
    Contao-Fan Avatar von markocupic
    Registriert seit
    06.12.2010.
    Ort
    Oberkirch (Schweiz)
    Beiträge
    660

    Standard

    Zitat Zitat von nessbess Beitrag anzeigen
    Danke für die Antwort!
    Das Modul der Teilnehmerliste nutzt das Template mod_calendar_event_booking_unsubscribe_from_event_ module.html. Dafür nutzt das Modul Event-Stornierungsformular das Template calendar_event_booking_member_list_partial.html.
    ness
    Wieso nutzt du für jedes der drei Module nicht das dafür vorgesehene Template? Das macht irgendwie keinen Sinn.
    Anfragen für bezahlten Support oder Extension-Programmierung via PN.

  10. #10
    Contao-Nutzer
    Registriert seit
    12.04.2018.
    Beiträge
    8

    Standard

    Zitat Zitat von markocupic Beitrag anzeigen
    Wieso nutzt du für jedes der drei Module nicht das dafür vorgesehene Template? Das macht irgendwie keinen Sinn.
    Das mache ich. Vielleicht habe ich mich nicht richtig ausgedrückt

    Ich habe gerade Contao 4.9.16 und calendar-event-booking-bundle 4.1.0 neu mit dem Contao Manager installiert. Ein Theme angelegt und in die Module geschaut, mehr noch nicht. Der Name des Modultyps der Teilnehmerliste ist wieder wie im oberen Screenshot zu sehen. Das Template des Moduls Teilnehmerliste ist standardmäßig (!) das Template von unsubscribe_from_event_module.

    Das Modul Event-Stornierungsformular hat zwar den korrekten Namen, möchte aber zwei Templates einbinden und zwar die des Moduls der Teilnehmerliste.

    Es ist möglich, das Event-Stornierungsformular wie die Teilnehmerliste zu nutzen und einfach beim Reader mit einzubauen. Tatsächlich erhalte ich dann die korrekte Ausgabe. Jedoch klappt es nicht umgekehrt auch mit dem Stornierungsformular, sicher, weil es eigentlich andere Templatekonfigurationen nutzt. Die Abmeldungen funktionieren daher nicht.

    Dieser Fehler war eine Version vorher nicht vorhanden.

    Ich wüsste auch nicht, was ich jetzt falsch gemacht haben könnte, da ich ja alles in einem neuen Verzeichnis neu installiert habe, ohne eigene Dateien oder Templates und mit frischer DB. Keine anderen Erweiterungen. Der Fehler hängt an keiner Konfiguration, sondern ist direkt bei den Modulen.

  11. #11
    Contao-Fan Avatar von markocupic
    Registriert seit
    06.12.2010.
    Ort
    Oberkirch (Schweiz)
    Beiträge
    660

    Standard

    Ach so! Ja, da ist tatsächlich ein Fehler passiert.
    Gehe auf 4.1.1
    Anfragen für bezahlten Support oder Extension-Programmierung via PN.

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
  •