Einen Contao HOOK einrichten

von Marco Simbürger

Das Einrichten eines Contao-HOOKs funktioniert eigentlich immer gleich. Je nach HOOK werden aber andere Parameter übergeben. Alle Informationen zu den jeweiligen HOOKs findest du in der Contao-Dokumentation: Contao-HOOKs

In der Dokumentation sind alle vorhanden HOOKs mit einer kurzen Beschreibung aufgelistet. Man kann sich nun für einen passenden HOOK entscheiden, der den gegebenen Anforderungen gerecht wird. Ich nehme für dieses Beispiel den processFormData-HOOK, da ich diesen schon sehr oft verwendet habe.

Wir sehen in der Dokumentation folgendes Beispiel:

 

// config.php
$GLOBALS['TL_HOOKS']['processFormData'][] = array('MyClass', 'myProcessFormData');

// MyClass.php
public function myProcessFormData($arrPost, $arrForm, $arrFiles)
{
    // Beliebiger Code
}

Für einen Contao-HOOK müssen immer zwei Dateien erstellt bzw. zwei Einträge gemacht werden:

  • die Registration des HOOKs in der config.php
  • Eine PHP-Datei mit einer Klasse und der Methode für die Logik des HOOKs

Wie der HOOK registriert werden muss und welche Parameter der Methode übergeben werden, kann man eben praktischerweise aus der Contao-Dokumentation herauslesen.

Im Prinzip legt man ein neues Contao-Modul mit zwei Dateien an (Die config.php und die Klasse mit der Logik).

Wir erstellen also unter /system/modules/ einen neuen Ordner für unser Contao-Modul und nennen diesen mal "myModule". Darin einen Ordner /config und da drin die Datei config.php. In dieser PHP-Datei registrieren wir jetzt den HOOK. Wir müssen dabei bereits angeben, wie die Klasse und die entsprechende Methode heissen. Wir nennen die Klasse z.B. "MyModuleClass" und die Methode für den processFormData-HOOK "myProcessFormData". Die Registration sieht dann wie folgt aus:

/system/modules/myModule/config/config.php

$GLOBALS['TL_HOOKS']['processFormData'][] = array('MyModuleClass', 'myProcessFormData');

Anschliessend erstellen wir im Modul-Ordner die Dateien für die Klasse und Methoden. Der Dateiname muss gleich sein wie der Klassennamen. Wir erstellen also eine Datei MyModuleClass.php und schreiben darin unsere Klasse und die Methode:

system/modules/myModule/MyModuleClass.php

class MyModuleClass extends Backend {

	public function myProcessFormData($arrPost, $arrForm, $arrFiles)
	{
		//Hier kommt dann die Logik für den Hook
	}
	
}

Zum Schluss müssen wir noch die Autoload-Dateien erstellen. Die Autoload-Dateien sorgen dafür, dass alle notwendigen Klassen und Templates des Moduls im Contao-System registriert werden. Für die Erstellung der Autoload-Dateien bietet Contao von Haus aus ein praktisches Tool an. Wir wechseln dazu ins Contao-Backend und klicken unter "Entwickler-Tools" auf den Punkt "Autoload-Creator". Anschliessend wählen wir unser Modul aus (also den Modul-Ordner "myModule") und klicken danach auf den Button "Autoload-Dateien erstellen". Die Autoload-Dateien werden automatisch generiert. Sie befinden sich dann im config-Ordner des Moduls.

Somit ist der HOOK fertig eingerichtet.
(Ggf. muss unter Systemwartung noch der Interne Cache geleert werden.)

Zurück

Kommentare

Kommentar von Andreas |

Hi Marco,

könntest Du mal für dieses konkrete Beispiel beschreiben, wie man daraus ein Bundle für Managed Contao 4.6 erstellt? Nach der Migration von C3 auf die aktuelle Version in unserem Sportverein bereitet mir das als Hobbyadmin und Symfony-Einsteiger noch größere Probleme.

Besten Dank!
Andreas

Antwort von Marco Simbürger

Hallo Andreas

Das mit den eigenen Modulen/Hooks funktioniert in Contao 4 eigentlich genau gleich. Unter system/modules/myModule/ oder ggf. myModule/src/Resources/contao/ falls Du diese neue Variante verwendest. Funktioniert beides.

Konnte ich Deine Frage damit beantworten?

Gruss
Marco

Kommentar von Andreas |

Hi Marco,

danke für die schnelle Rückmeldung! Mein Problem ist vorrangig, das ich in C4 weder die "AppKernel.php" zum Bekanntmachen neuer Module, noch den von C3 bekannten Autoload-Installer habe. Ich gehe also mal stark davon aus, dass es nicht reicht die bekannten Dateien an einer der genannten Stellen zu entpacken.

Grüße
Andreas

Antwort von Marco Simbürger

Hallo Andreas

Doch, das reicht neu bei Contao 4. Einfach Dein eigenes Modul in den Ordner system/modules/ einfügen und dann noch den Cache leeren: vendor/bin/contao-console cache:clear (vom Contao Root-Verzeichnis aus)

Gruss
Marco

Kommentar von Andreas |

Hi Marco,

ok danke. Das klingt anders als befürchtet machbar. Da ich keinen SSH-Zugang habe nehme ich an den Cache auch im Contao-Manager löschen zu können, richtig? Alternativ, welche Möglichkeit gibt es da sonst noch?

Andreas

Antwort von Marco Simbürger

Hallo Andreas

Ja, Cache leeren geht via Console oder auch mit dem Contao-Manager.

Gruss
Marco

Kommentar von Georg |

Hallo Marco, bist du hier noch aktiv? Ich versuche in Contao 4.13 einen customizeSearch Hook hinzuzufügen und schaffe es nicht

Einen Kommentar schreiben

Bitte rechnen Sie 2 plus 2.