Events, Services und Overrides passend einsetzen

Ereignisse und Dienste verbinden eine Erweiterung mit vorhandenen ConcreteCMS-Abläufen. Wählen Sie den Einstiegspunkt anhand der Aufgabe und der tatsächlichen Core-Signatur. Testen Sie Wiederholung, Abbruch und fehlende Daten.

Zuerst den Auslöser im Core nachweisen

Suchen Sie in der installierten Core-Version nach dem Ereignis, das Ihrer Aufgabe entspricht, und lesen Sie, welche Daten es beim Auslösen enthält. Ähnliche Event-Namen können vor oder nach einer Speicherung liegen. Ein Listener, der zu früh auf eine noch nicht gespeicherte ID zugreift, liefert leere Werte; ein Listener, der bei jeder Seitenversion läuft, kann unerwünschte doppelte E-Mails erzeugen. Dokumentieren Sie Trigger, Daten und gewünschte Idempotenz.

Registrieren Sie Listener beim Start des Pakets oder an der dafür vorgesehenen Stelle der Anwendung. Halten Sie den Listener klein und delegieren Sie Verarbeitung an einen eigenen Service. Prüfen Sie erneut beim Upgrade: Der Code darf nicht bei jedem Seitenaufruf erneut Daten migrieren. Package erstellen trennt Registrierung von einmaliger Installation.

Die Aufgabenverwaltung zeigt den Unterschied zwischen registrierter Funktion und tatsächlichem Lauf.

Abbildung 1: Ein Event-Listener reagiert auf ein Ereignis; eine geplante Aufgabe braucht zusätzlich einen aktiven Scheduler.

Container und Services nutzen

Concrete nutzt einen Anwendungscontainer. In einem Package werden ein Task-Controller und Express-Controller über Manager registriert; die eigentliche Arbeit übernehmen separate Installer und Dienste. So bleiben Logik und Registrierung prüfbar. Nutzen Sie Abhängigkeiten aus dem Container, statt globale Objekte ungeprüft zu erzeugen. Achten Sie darauf, welcher Site-Kontext aktiv ist: Eine Editor-Konfiguration aus der globalen Anwendung kann von der tatsächlich bearbeiteten Site abweichen.

Wenn eine Core-Methode nicht ausreicht, prüfen Sie zuerst ein Custom Template, eine PageTheme-Funktion oder einen registrierten Service. Ein Override tiefer Core-Klassen hat ein höheres Update-Risiko. Erklären Sie im Code, warum er nötig ist und welche Core-Version getestet wurde. Kopieren Sie keine ganze Core-Klasse, um eine Zeile zu ändern; das verbirgt spätere Sicherheitskorrekturen.

Wiederholung und Fehlerfälle testen

Lösen Sie das Ereignis einmal und mehrfach aus. Prüfen Sie, ob ein fehlendes Objekt, ein abgebrochener Vorgang oder ein fehlender Empfänger ordentlich behandelt wird. Eine E-Mail-Benachrichtigung sollte keine Daten doppelt speichern; ein gescheiterter Versand darf eine bereits gespeicherte Anfrage nicht unsichtbar machen. Testen Sie nach einem Cache-Leeren und nach Paket-Upgrade erneut, ob Registrierungen weiterhin vorhanden sind.

Für den Betrieb geplanter Arbeit lesen Sie Aufgaben regelmäßig ausführen. Lesen Sie die genaue Signatur eines Events in den Core-Dateien der eingesetzten Version nach.

Weiterlesen

Quelle: Concrete CMS Dokumentation (EN) · Stand: ConcreteCMS 9.5.7