Hook mit Funktion
Hier schauen wir uns den Hook getSingleField_beforeRender aus der ehemaligen Core-Datei class.t3lib_tceforms.php an.
Wenn die Abarbeitung im Code an dieser Stelle angekommen ist, stehen alle Formulardaten bereit für den letzten Schritt: die eigentliche HTML-Generierung der Backend-Felder. Genau hier wollen wir ansetzen. Als anschauliches Beispiel setzen wir dem Formularfeld header pauschal den Text "Header: " voraus. Das macht in der Praxis zwar wenig Sinn, zeigt aber perfekt, wie dieser Hook-Typ funktioniert.
So sieht der Hook im TYPO3-Core aus:
Wenn wir im Core-Code nach $this->hookObjectsSingleField suchen, stoßen wir auf das zugehörige Konfigurations-Array:
Im Hook wird per method_exists() geprüft, ob unsere Hook-Klasse eine Methode namens getSingleField_beforeRender besitzt. Da die Methode somit fest vorgegeben ist, dürfen wir in der ext_localconf.php keinen eigenen Methodennamen anfügen.
Unsere ext_localconf.php sieht daher wie folgt aus:
Da $this im Core-Aufruf nicht als Parameter an die Hook-Methode übergeben wird, müssen wir auch keine Variable umbenennen. Wir können die Methoden-Signatur eins zu eins übernehmen.
Schauen wir uns zunächst an, was in der Variable $PA steckt:
Wenn ihr nun ein beliebiges Inhaltselement im Backend bearbeitet, erhaltet ihr eine Auflistung aller verarbeiteten Felder. Der Hook wird nacheinander für jedes einzelne Feld aufgerufen. Heißt: Wir müssen in unserem PHP-Code gezielt auf das Feld $field === 'header' filtern.
Gehen wir einen Schritt weiter und lassen uns die Struktur von $PA speziell für das Feld header ausgeben:
In dem ausgegebenen Array finden wir unter anderem den Schlüssel itemFormElValue. Dieser enthält den aktuell eingetragenen Wert der Überschrift.
Nun wollen wir diesen Wert verändern. Da die Core-Methode keinen Rückgabewert per return verarbeitet, müssen wir den zu verändernden Parameter per Referenz annehmen. In unserem Fall ist das $PA:
Wir greifen auf den Wert der Überschrift zu, stellen unser Präfix voran und schreiben das Ergebnis zurück in das Referenz-Array $PA.
Wenn ihr danach ein Inhaltselement im Backend zum Bearbeiten öffnet, ist allen Überschriften der Text "Header: " vorangestellt.