Contao Catalog Edit: Mail Benachrichtigung

Der Catalog ist sicherlich eine der komplexesten und umfangreichsten, aber auch leistungsstärksten Erweiterungen, die Contao so zu bieten hat. Und trotzdem muss man sich gelegentlich selbst um eine Lösung bemühen, beispielsweise um das Catalog Handling noch benutzerfreundlicher zu gestalten.

Dieser Artikel beschreibt am Beispiel E-Mail Versand, wie man mit beliebigen Aktionen auf das Ereignis “ein Katalog Eintrag wurde im Frontend editiert” reagieren kann. Andere Aktionen sind natürlich ebenfalls denkbar.

Anmerkung:
Im Contao Community Forum trifft man immer mal wieder auf diese Fragestellung. Ich hoffe, dass ich damit dem ein oder anderen helfen kann, das Handling um den Catalog noch etwas mehr zu “automatisieren”. Das Schöne ist: die Sache ist je nach Umfang der Datenverarbeitung im Wesentlichen in 5 Minuten erledigt - wenn man weiß, wo man ansetzen muss.

Hilfreiche Tutorials zum Catalog gibts natürlich vor allem im .

Versionen aktuell: Contao 2.9.4, Catalog 2.0.x

Szenario und Vorarbeiten

Sie haben auf Ihrer Website einen Katalog im Einsatz. Bestimmte Personen dürfen bestehende Katalogeinträge vom Frontend aus bearbeiten. Immer, wenn ein Datensatz bearbeitet wurde, soll der Website Administrator per Email über diese Änderungen informiert werden.

Im Folgenden gehe ich davon aus, dass einen Katalog gibt, dessen Module so konfiguriert sind, dass einzelne Frontend-Benutzer den Eintrag editieren können:

Es gibt ein Modul Katalog Liste, in dem die Checkbox “Bearbeitung aktivieren” aktiviert ist. Desweiteren leitet dies auf eine Seite, in dessen Artikel vorab ein Modul “Katalog Bearbeitung” angelegt haben. Die weitere Konfiguration hängt natürlich inhaltlich vom Katalog selbst ab.

Bevor man nun loslegt, sollte man sich vergewissert haben, dass die Frontend-Bearbeitung funktioniert.

Alles weitere ist ein wenig Programmierung.

Programmierung der Email Benachrichtigung

Zur Email Benachrichtigung nutzt man den Hook catalogFrontendUpdate, der immer dann zum Einsatz kommen kann, wenn ein beliebiger Katalog Eintrag im Frontend editiert und damit aktualisiert wurde.  Dieser oder allgemein ein Hook kümmert sich, falls aktiviert, darum, dass aufgrund eines eintretenden Ereignisses (nämlich in diesem Fall “ein Eintrag wurde aktualisiert”) eine oder mehrere Aktionen ausgeführt werden (in diesem Beispiel “schicke eine Mail”).

Contao kennt eine Menge Hooks und das Gelungene ist: man kann sie selbst sehr leicht an eigene Bedürfnisse anpassen.

Der Modulordner und seine Klasse

Im ersten Schritt muss in /system/modules ein Modulordner angelegt werden. Man kann diesen in diesem Fall benennen, wie man möchte, beispielsweise CatalogNotifier. Nun legt man in diesem Ordner eine neue .php Datei an, die Datei CatalogNotifier.php.

Hinweis: Nie vergessen, an den Anfang eines selbst geschriebenen php Files die Zeile

if (!defined('TL_ROOT')) die('You can not access this file directly!');

zu stellen, um das Gesamtsystem zu schützen!

Nun geht es los: zunächst definiert man mal die Klasse CatalogNotifier.

Beispielsweise:

class  CatalogNotifier extends Backend {...}

Diese Klasse nun kennt eine Methode, die ich mal notify nenne. Diese soll später immer dann ausgeführt werden, wenn ein Katalog Eintrag über das Frontend aktualisiert wird.

Wissenswert: der Funktion notify übergibt man einen Parameter, nämlich das Array mit dem betroffenen Katalog-Datensatz.

public function notify($catalogData){...}

Innerhalb der Funktion hat man nun alle Werte des übermittelten (aktualisierten) Datensatzes zur Verfügung.

Zunächst erstellt man das E-Mail-Objekt über die Klasse Email: eine einfache Sache:


$objEmail = new Email();
$objEmail->subject = "Betreff";
$objEmail->from ="[email protected]";
$objEmail->fromName ="Mein Name";

Beispielsweise kann man nun die Werte des “Katalog Arrays” nun durchlaufen und den Text der E-Mail damit “befüllen”:

foreach($catalogData as $key=>$value){
$objEmail->text .= $key .":".$value ."\n\n";
}

Natürlich kann man das hier wesentlich schönen, - hier geht’s einfach ums Prinzip.

Und am Ende der Funktion? Versendet man natürlich seine Email an einem beliebigen Empfänger.

$objEmail->sendTo('[email protected]');

Den Hook aktivieren

Bis zu diesem Punkt steht die neue Notifier-Klasse samt ihrer Funktion sozusagen “funktionslos” im Raum. Sie muss aktiviert werden, damit die Mail-Benachrichtigung immer dann ausgelöst wird, wenn ein Katalog Eintrag aktualisiert wird.

Diesen Eintrag kann man entweder in der config.php Datei des config Ordners des Moduls selbst vornehmen (d.h. im Modulordner muss zusätzlich eine Datei config/config.php angelegt werden) oder in der globalen localconfig.php unter system/config.

$GLOBALS['TL_HOOKS']['catalogFrontendUpdate'][] = array(’CatalogNotifier’, ‘notify’);

Allgemein heißt die Anweisung:
$GLOBALS['TL_HOOKS']['NAME_DES_HOOKS'][] = array(’meineKlasse’, ‘meineMethode’);

Weiterführend

Neben dem “Aktualisierungs-Hook” gibt es auch noch den “Ergänzen-Hook” - nämlich für den Fall, dass neue Katalog-Einträge übers Frontend erfasst werden dürfen. Das Procedere ist analog, nur heißt der Hook catalogFrontendInsert.

Natürlich kann man mit Hilfe dieses Hooks eine Menge anderer Aktionen “anstoßen” - die Mail ist also nur ein Beispiel von vielen. Und der Hook selbst ist ein klasse Werkzeug, um Contao um spezielle Funktionen zu erweitern, ohne dabei das Basissystem anfassen zu müssen.

 

Auch was dazu sagen?