Einführung in die Welt der TYPO3 Hooks

Der heutige Blogbeitrag widmet sich dem Thema Hooks und deren Verwendung in TYPO3. Manche werden sich nun bestimmt denken, was kann an Hooks so schwer zu verstehen sein? Nun, im Prinzip ist das Konzept das sich hinter dem Begriff Hook verbirgt ein leichtes Konzept. Aber nichtsdestotrotz sind es gerade die simplen Dinge im Leben, die die meiste Zeit in Anspruch nehmen. Aus diesem Grund wird im Folgenden näher auf die Verwendung von Hooks in TYPO3 eingegangen.

Das Prinzip von Hooks

Hooks ermöglichen es bestehende Funktionen nach eigenem Ermessen zu erweitern. Doch was genau bedeutete das? Ein Hook „hängt“ sich in eine bestehende Funktion und bettet zusätzlichen Code ein. Dies ist jedoch nur möglich, wenn in einer bestehenden Funktion die Möglichkeit besteht einen Hook „einzuhängen“. Daher ist es auch möglich, dass es Funktionen gibt, die mittels Hooks adaptierbar sind und welche, bei denen dies nicht möglich ist.

In TYPO3 ist es, so wie in vielen anderen CMS, möglich Hooks schnell und einfach zu verwenden. Nun stellt sich jedoch oftmals die Frage, wie Hooks implementiert werden können. Prinzipiell ist in TYPO3 ein Hook nichts weiter als ein Array das erweitert wird. Als „Basis“ dient dabei $GLOBALS[‚TYPO3_CONF_VARS‘] [‚EXTCONF‘] bzw. $GLOBALS[‚TYPO3_CONF_VARS‘] [‚SC_OPTIONS‘]. Der genaue Unterschied ist bitte der Dokumentation zu entnehmen (https://docs.typo3.org/typo3cms/CoreApiReference/ApiOverview/Hooks/Configuration/Index.html). Das Pattern für einen Hook sieht wie folgt aus

$GLOBALS[‚TYPO3_CONF_VARS‘][‚EXTCONF‘][ extension_key ][ sub_key ] = value
$GLOBALS[‚TYPO3_CONF_VARS‘][‚SC_OPTIONS‘][ main_key ][ sub_key ][ index ] = function_reference

Achtung: in neueren Versionen von TYPO3 (ab TYPO3 7 LTS) ist $GLOBALS[‚TYPO3_CONF_VARS‘] statt $TYPO3_CONF_VARS zu verwenden.

Ein Beispiel, wie dies in einer Extension aussieht, ist:

$GLOBALS[‚TYPO3_CONF_VARS‘][‚EXTCONF‘][’sr_freecap‘][‚encryptionAlgorithm‘]
$GLOBALS[‚TYPO3_CONF_VARS‘][‚SC_OPTIONS‘][‚extbase‘][‚commandControllers‘][]

Hooks in TYPO3 verwenden

1) Überprüfen, ob Hook existiert
Möchte man überprüfen, ob ein Hook den man verwenden möchte auch gesetzt ist, ist das entsprechende Array im Code der betreffenden Extension zu suchen, sprich tritt das Pattern „[‚EXTCONF‘][’sr_freecap‘][‚encryptionAlgorithm‘]“ in einer Class in der Extension sr_freecap auf.

2) Überprüfen, was der Hook tut
Meistens wird mittels einer if-Abfrage überprüft, ob der zu verwendende Hook bereits gesetzt wurde bzw. ob dieser Hook zur Anwendung kommt. Ein Beispiel hierfür ist in der Extension sr_freecap in der Class EncryptionUtitlity zu finden:

$encryptionAlgorithm =
$GLOBALS[‚TYPO3_CONF_VARS‘][‚EXTCONF‘][’sr_freecap‘][‚encryptionAlgorithm‘];
$availableAlgorithms = mcrypt_list_algorithms();

if (in_array($encryptionAlgorithm, $availableAlgorithms))
{ ….. }

3) Verwendung eines Hooks in Extensions
Damit ein zu verwendender Hook implementiert werden kann benötigt es nicht viel – das Array muss lediglich mit einem Wert befüllt werden, der in Schritt 2) zu eruieren ist. Generell werden Hooks in der ext_localconf.php befüllt. Ein Beispiel hierfür

$GLOBALS[‚TYPO3_CONF_VARS‘][‚SC_OPTIONS‘][‚extbase‘][‚commandControllers‘][] = ‚Plan2net\\P2nSchrackTemplate\\Command\\SpritemapCommandController‘;

Eine generelle Übersicht, welche Hooks es alle in TYPO3 gibt ist mir nicht bekannt – vor allem da dies auch auf Versions Ebenen zu überprüfen ist. Daher würde ich raten immer zuerst im Source Code nachzusehen, ob der entsprechende Hook, dem man gedenkt zu verwenden, überhaupt noch existiert.

Anfrage