Artikel
von Patrick Froch

Dieser Beitrag ist eine Neuauflagen eines Artikels, den ich für Contao 2 geschreiben habe. Er ist nun für Contao 3 überarbeitet. Es geht darum, wie man in Contao eine eigene Aktion anlegt. Was ist nun eine "Aktion"?

In Contao ist eine Aktion (oder "Operation") eine Handlung, die man mit einem Datensatz ausführen kann. Das Bearbeiten, Löschen oder Kopieren von Datensätzen sind z.B. solche Operations. Im Gegensatz dazu gibt es die globalen Aktionen (oder "global Operations"). Dies sind Handlungen, die mehrere Datensätze oder die Tabelle selbst betreffen, wie z.B. das Einfügen eines neuen Datensatzes, oder "Mehrere bearbeiten".

Aktion.in.Uebersicht

Ordnerstruktur

Als erstes benötien wir einige Ordner für unsere Aktion. Wir erstellen eine Verzeichnis unter TL_ROOT/system/modules/. Ich nenne es hier einfach esitaction, der Name kann aber frei gewählt werden, solange er noch nicht vorhanden ist. Darin legen wir die Ordner assets, assets/img, classes, config, dca, languages und languages/de an. Es ergibt sich also folgende Ordnerstruktur:
Um nicht immer den ganzen Pfad schreiben zu müssen, lasse ich
TL_ROOT/system/moduels/esitaction weg. Alles was wir tun, findet in diesem Ordner statt!
TL_ROOT bezeichnet das Verzeichnis in dem Contao installiert ist!

DCA

Nun wollen wir diese Ordner mit Leben füllen. Beginnen wir mit dem DCA, die entsprechende Datei trägt den Namen der Tabelle, für die wir eine Aktion erstellen wollen.
In diesem Beispiel werde ich eine Aktion in die Tabelle tl_member einfügen. Diese Aktion wird es ermöglichen einem Mitglied mit einem Klick das Anmelden am Frontend zu verbieten. Hierzu wird der Haken bei "Login erlauben" entfernt, das Mitglied aber nicht deaktiviert.

Wir legen also die Datei /dca/tl_member.php mit folgendem Inhalt an:

In Zeile 6 erstellen wir einen Key, den wir später in der Datei /config/config.php einer Methode zuordnen werden. Diese Methode wird dann bei einem Klick auf unser Icon aufgerufen. In Zeile 5 wird die Beschriftung festgelegt, diese werden wir in /languages/de/tl_member.php einfügen. Wir haben nun das DCA der Tabelle tl_member erweitert. Nun kann es aber auch vorkommen, dass man in einer eigenen Tabelle eine Aktion nutzen möchte. Auch diesen Fall möchte ich hier kurz zeigen. Hier wird die Aktion einfach im DCA unter operations eingefügt: Ich habe die nicht relevanten Einträge für eine bessere Übersicht gekürtzt.

Das Icon

Im vorherigen Abschnitt im ersten Quelltext in Zeile 7 wird das Icon festgelegt. Dies wird in unserem Beispiel unter system/moduels/esitaction/assets/img/banmember.png gespeichert. Im DCA muss der gesammte Pfad ab TL_ROOT angegeben werden. Wer sich nun die Früchte unserer Arbeit ansehen will, wird vermutlich erst einmal nicht viel sehen. Damit das Icon angezeigt wird muss in der Regel noch die Datei .htaccess im Ordner /assets/ mit dem folgenden Inahlt angelegt werden:

Nun sollte in der Liste der Mitglieder das neue Icon zu sehen sein. Dies könnte dann z.B. so aussehen:

Aktion.in.Uebersicht

Languages

Als nächstes werden wir das Label anlegen. Wir erstellen hierfür die Datei /languages/de/tl_member.php mit folgendme Inhalt: Das %s wird von Contao durch die ID des Datensatzes ersetzt.

Config

Nun sieht es zwar gut aus, aber es passiert noch nichts. Deshalb beginnen wir nun mit der Funktion. Zuerst sagen wir Contao was getan werden soll. Dazu erstellen wir die Datei /config/config.php: Da der Eintrag im Backen benutzt wird, muss er in das Array BE_MOD in $GLOBELS eingetragen werden. Die Tabelle tl_mebmer befindet sich in der Gruppe accounts und der Name des Eintrags der Tabelle heißt member. Dort Erzeugen wir unseren Key banmember, zusammen ergibt dies dann $GLOBALS['BE_MOD']['accounts']['member']['banmember']. Wir weisen ein Array zu, in dem als erstes der Name unserer Klasse steht (MyBanMemberClass), als zweites steht dort die Methode, die die Verarbeitung der Anfrage übernehmen soll (banFunction).

Autolaod

Damit unsere Klasse gefunden wird, müssen wir Contao in der Datei /config/autolaod.php sagen wo sie liegt: Auch hier muss wieder der Pfad ab TL_ROOT angegeben werden.

Klasse

Nun erstellen wir die Klasse MyBanMemberClass im Ordner /classes/: Zugegeben dies Vorgehen ist nicht sehr elegant, so sollte man z.B. grundsätzliche die Meldungen in Language-Files speichern und das Umleiten sollte berücksichtigen, ob Contao in einem Unterordner liegt, aber um das grundsätzliche Vorgehen zu verdeutlichen, soll dies erst einmal reichen. Wenn man nun auf unser Icon klick, wird der Haken "Login erlauben" gelöscht und das Mitglied kann sich nicht mehr am Frontend anmelden. Im Backend leiten wir zurück zur Übersicht der Mitglieder und zeigen dort eine entsprechende Meldung an. Dies könnte dann so aussehn:

Nach.Aktion.in.Uebersicht

Nun könnte man den Status des Hakens "Login erlauben" noch über das Icon kenntlich machen. Dies werde ich aber in einem weitern Artikel erklären. Damit ist unsere kleine Erweiterung fertig. Die komplette Ordnerstruktur sollte nun folgendermaßen aussehen: Im DCA habe wir den Key festgelegt, in config.php haben wir Contao gesagt, welche Methode bei diesem Key aufgerufen werden soll und in unserer Klasse (MyBanMemberClass) haben wir die Funktion hinterlegt, die ausgeführt werden soll. Das war's auch schon, mehr ist nicht zu tun.

Zurück

Kommentare

Aufgrund der unklaren Rechtslage durch die DSGV habe ich mich entschlossen, die Kommentare bis auf Weiteres zu deaktivieren.