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".

Ordnerstruktur
Als erstes benötien wir einige Ordner für unsere Aktion. Wir erstellen eine Verzeichnis unterTL_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:
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.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:
/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 untersystem/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:

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 KlasseMyBanMemberClass
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:
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.
Kommentare
Einen Kommentar schreiben